我如何在R中的第二列订购数据框?

可能重复:
如何按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

为什么SampleID被数字1-15取代,这些数字代表了什么,我已经阅读了?order()页面,但是这似乎解释了sort.listorder()更好,如果有人能帮我解决这个问题的话我会很感激。


简短的答案是你做得很完美。 你只是在阅读和写文件时遇到一些困难。 通过你的代码:

data<-read.table('Table.txt', header=TRUE,row.names=1,sep='t')

上面的行正在读取您的数据,但row.names=1告诉它使用第一列作为行的名称。 所以现在你的SampleIDs是行名,而不是它们自己的列。 如果您在运行此行后立即键入datahead(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列没有被赋值为行的名字,你可能会好起来的。


看看plyr软件包的arrange功能。

arrange(data, Cluster)
write.table(data, "ordered_data.txt")
链接地址: http://www.djcxy.com/p/70837.html

上一篇: How can I order a dataframe by the second column in R?

下一篇: Java Generics Wildcarding With Multiple Classes