22

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

我想按集群对其进行排序/排序以获得如下结果:

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()页面,但是这似乎比order()更好地解释了 sort.list如果有人可以帮助我解决这个问题,我会非常感激的。

4

2 回答 2

12

简短的回答是你做得很完美。您只是在读取和写入文件时遇到了一些困难。浏览您的代码:

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

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

于 2012-11-14T14:27:10.447 回答
5

看看包的arrange功能plyr

arrange(data, Cluster)
write.table(data, "ordered_data.txt")
于 2012-11-14T13:18:11.540 回答