更改全局环境以按数字顺序读取
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<-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);
【讨论】:
这太完美了,我什至没有想到检查它是否是一个角色(哎呀)!以上是关于更改全局环境以按数字顺序读取的主要内容,如果未能解决你的问题,请参考以下文章