更改全局环境以按数字顺序读取

Posted

技术标签:

【中文标题】更改全局环境以按数字顺序读取【英文标题】:Change global environment to read in numerical order 【发布时间】:2016-08-01 10:41:51 【问题描述】:

我有一个数据集,其中有 22 只动物。每种动物的名字如下:c(" Shark1", "Shark2", "Shark3", ...) 等。

我正在尝试将两个类别变量相互绘制,以确定每条鲨鱼在不同深度所花费的时间比例:

Sharks<-table(merge$DepthCat, merge$ID2) #Depth category vs. ID


merge$DepthCat[merge$Depth2>200]<-"4"
Sharks<-table(merge$DepthCat, merge$ID2)

plot(t(Sharks), main="", 
     col=c("whitesmoke", "slategray3", "slategray", "slategray4"), 
     ylab="Depth catagory", xlab="Month")
axis(side=4)

虽然情节有效,但它不是按数字顺序绘制,而是按字母顺序绘制,因此我得到下面的图表。

有谁知道如何解决这个情节?我研究了数组方法,但不确定如何在这里实现。

【问题讨论】:

Sharks&lt;-table(merge$DepthCat, as.numeric(merge$ID2)) 工作不好吗? 【参考方案1】:

您没有提供完整的数据集,所以我生成了自己的随机数据。鉴于源自ID2 的条形标题按字典顺序排序,我假设它们作为字符存储在您的data.frame merge 中,因此我生成了它们。

set.seed(2L);
NR <- 300L;
merge <- data.frame(ID2=sample(as.character(1:22),NR,T),Depth2=pmax(0,rnorm(NR,100,50)),stringsAsFactors=F);
merge$DepthCat <- as.character(findInterval(merge$Depth2,c(0,66,133,200)));

str(merge);
## 'data.frame': 300 obs. of  3 variables:
##  $ ID2     : chr  "5" "16" "13" "4" ...
##  $ Depth2  : num  148.8 91.5 136.1 57.8 163.9 ...
##  $ DepthCat: chr  "3" "2" "3" "1" ...

果然,我们可以用这个测试数据重现问题:

Sharks <- table(merge$DepthCat,merge$ID2);

plot(t(Sharks),main='',col=c('whitesmoke','slategray3','slategray','slategray4'),ylab='Depth category',xlab='Month');
axis(side=4L);


解决方案是将ID2 向量强制为数字,以便按数字排序。

merge$ID2 <- as.integer(merge$ID2);

str(merge);
## 'data.frame': 300 obs. of  3 variables:
##  $ ID2     : int  5 16 13 4 21 21 3 19 11 13 ...
##  $ Depth2  : num  148.8 91.5 136.1 57.8 163.9 ...
##  $ DepthCat: chr  "3" "2" "3" "1" ...

Sharks <- table(merge$DepthCat,merge$ID2);

plot(t(Sharks),main='',col=c('whitesmoke','slategray3','slategray','slategray4'),ylab='Depth category',xlab='Month');
axis(side=4L);

【讨论】:

这太完美了,我什至没有想到检查它是否是一个角色(哎呀)!

以上是关于更改全局环境以按数字顺序读取的主要内容,如果未能解决你的问题,请参考以下文章

以最快的方式重新排序字母以按字典顺序排在第一位

发送数组以按顺序排列

如何将 axlsx 文件分组以按 org 字母顺序排序

寻找正确的 mule 组件以按 fifo 顺序解复用消息

使用 Gatling 将场景模块化以按顺序运行

如何比较包含非英文字符的 unicode 字符串以按字母顺序排序?