可能重复:
如何按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
Run Code Online (Sandbox Code Playgroud)
我想通过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
Run Code Online (Sandbox Code Playgroud)
我试过以下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)
Run Code Online (Sandbox Code Playgroud)
并获得以下输出:
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
Run Code Online (Sandbox Code Playgroud)
为什么SampleIDs被数字1-15取代,这些数字代表什么,我已经阅读了?order()页面但是这似乎比order()更好地解释了sort.list,如果任何人可以帮我解决这个问题我会非常感激.
Mat*_*agg 12
简短的回答是你做得很完美.您在阅读和编写文件时遇到一些困难.浏览你的代码:
data<-read.table('Table.txt', header=TRUE,row.names=1,sep='\t')
Run Code Online (Sandbox Code Playgroud)
上面的行正在读取你的数据,但row.names=1告诉它使用第一列作为行的名称.所以现在你的SampleID是行名而不是他们自己的列.如果您键入data或head(data)或str(data)跑这条线后,本应该是清楚的.只需省略row.names参数,它就会正确读取.
data <- data.frame(data)
Run Code Online (Sandbox Code Playgroud)
您不需要以上行,因为read.table()生成数据帧.你也可以看到它str(data).
data <- data[order(data$Cluster),]
Run Code Online (Sandbox Code Playgroud)
以上这条线很完美.
write.table(data, file = 'OrderedTable.txt', append = TRUE,
quote=FALSE, sep = '\t', na ='NA', dec = '.', row.names = TRUE,
col.names = FALSE)
Run Code Online (Sandbox Code Playgroud)
在这里,您包含了参数col.names = FALSE,这就是您的文件没有列名的原因.你也不需要/想要append=TRUE.如果你看一下help(write.table),你会发现它"仅在文件是字符串时才相关".这里似乎使文件写入而不结束最后一行,这可能会导致任何后来read.table()的抱怨.
结果中的数字1-15看起来像行号.您没有解释如何查看生成的文件,因此我无法确定.您可能以不解析row.names的方式读取文件,而是显示行号.如果您确定您的SampleIDs列未被指定为行的名称,您可能会没问题.
看看包的arrange功能plyr.
arrange(data, Cluster)
write.table(data, "ordered_data.txt")
Run Code Online (Sandbox Code Playgroud)