我只是想知道是否有人可以帮助我,我认为应该是一个容易解决的问题。
我有下表:
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
我想通过群集对其进行排序/排序,以获得如下结果:
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 优于订单()如果有人可以帮助我,我会非常感激。
答案 0 :(得分:10)
简短的回答是你完美地做到了。您在阅读和编写文件时遇到一些困难。浏览你的代码:
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列未被指定为行的名称,那么您可能会没事。
答案 1 :(得分:5)
查看arrange
包的plyr
功能。
arrange(data, Cluster)
write.table(data, "ordered_data.txt")