如何按 R 中的第二列排序数据框? [复制]
Posted
技术标签:
【中文标题】如何按 R 中的第二列排序数据框? [复制]【英文标题】:How can I order a dataframe by the second column in R? [duplicate] 【发布时间】:2012-11-02 22:25:40 【问题描述】:可能重复:How to sort a dataframe by column(s) in R
我只是想知道是否有人可以帮助我,我有一个我认为应该很容易解决的问题。
我有下表:
SampleID Cluster
R0132F041p 1
R0132F127 1
R0132F064 1
R0132F068p 1
R0132F015 2
R0132F094 3
R0132F105 1
R0132F013 2
R0132F114 1
R0132F014 2
R0132F039p 3
R0132F137 1
R0132F059 1
R0132F138p 2
R0132F038p 2
我想按 Cluster 对其进行排序/排序以获得如下结果:
SampleID Cluster
R0132F041p 1
R0132F127 1
R0132F064 1
R0132F068p 1
R0132F105 1
R0132F114 1
R0132F137 1
R0132F059 1
R0132F015 2
R0132F013 2
R0132F014 2
R0132F138p 2
R0132F038p 2
R0132F094 3
R0132F039p 3
我尝试了以下 R 代码:
data<-read.table('Table.txt', header=TRUE,row.names=1,sep='\t')
data <- data.frame(data)
data <- data[order(data$Cluster),]
write.table(data, file = 'OrderedTable.txt', append = TRUE,quote=FALSE, sep = '\t', na ='NA', dec = '.', row.names = TRUE, col.names = FALSE)
并得到以下输出:
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 2
10 2
11 2
12 2
13 2
14 3
15 3
为什么将 SampleIDs 替换为数字 1-15 以及这些数字代表什么,我已阅读 ?order()
页面,但这似乎可以解释 sort.list 比 order() 如果有人能帮我解决这个问题,我将不胜感激。
【问题讨论】:
【参考方案1】:看看plyr
包的arrange
函数。
arrange(data, Cluster)
write.table(data, "ordered_data.txt")
【讨论】:
感谢磨坊的建议,我会看看这个 plyr 包和这个功能。可能有用 更快、更简单、更好。【参考方案2】:简短的回答是你做得很好。您只是在读取和写入文件时遇到了一些困难。浏览您的代码:
data<-read.table('Table.txt', header=TRUE,row.names=1,sep='\t')
上面的行可以很好地读取您的数据,但是row.names=1
告诉它使用第一列作为行的名称。所以现在您的 SampleID 是行名,而不是它们自己的列。如果您在运行此行后立即键入data
或head(data)
或str(data)
,这应该很清楚。只需省略 row.names 参数,它就会正确读取。
data <- data.frame(data)
您不需要上面这行,因为read.table()
会生成一个数据框。您也可以通过 str(data)
看到这一点。
data <- data[order(data$Cluster),]
上面的线是完美的。
write.table(data, file = 'OrderedTable.txt', append = TRUE,
quote=FALSE, sep = '\t', na ='NA', dec = '.', row.names = TRUE,
col.names = FALSE)
在这里您包含了参数col.names = FALSE
,这就是您的文件没有列名的原因。你也不需要/想要append=TRUE
。如果您查看help(write.table)
,您会看到它“仅在文件是字符串时才相关”。这里似乎使文件写入时没有结束最后一行,这可能会导致任何后来的read.table()
抱怨。
结果中的数字 1-15 看起来像行号。你没有解释你如何看待生成的文件,所以我不能确定。您可能以不解析 row.names 而是显示行号的方式读取文件。如果您确定您的 SampleIDs 列没有被指定为行名,那么您可能会没事的。
【讨论】:
非常感谢,现在效果很好,解释得很好,你是明星。以上是关于如何按 R 中的第二列排序数据框? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何根据 Python、R 中不同数据框/患者之间的第一列元素/基因取第二列值/计数的平均值?