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

时间:2016-08-01 10:41:51

标签: r

我有一个数据集,其中我有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_plot

1 个答案:

答案 0 :(得分: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);

plot1

解决方案是将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);

plot2