在理解这里发生的事情时有点麻烦,在我看来,这两种排序下面数据框的方法是等价的。为什么R中的order()在传递子集数据框时会生成NA?
我们的数据帧,
cols <- c("chr","id","value")
df <- data.frame(c(1:5),c("ENSG1","ENSG2","ENSG3","ENSG4","ENSG5"),runif(5,5.0,10.0))
names(df) <- cols
df <- df[sample(nrow(df)),]
df
chr id value
5 ENSG5 8.913645
2 ENSG2 6.117744
4 ENSG4 8.558403
3 ENSG3 9.625546
1 ENSG1 6.105577
现在,方法1:
df[order(df[,c("chr","id")]),]
chr id value
1 ENSG1 6.105577
2 ENSG2 6.117744
3 ENSG3 9.625546
4 ENSG4 8.558403
5 ENSG5 8.913645
NA <NA> NA
NA <NA> NA
NA <NA> NA
NA <NA> NA
NA <NA> NA
以NAS会抛出一些奇怪的原因,而通过在DF列order()
中,
方法2:
df[order(df$chr,df$id),]
chr id value
1 ENSG1 6.105577
2 ENSG2 6.117744
3 ENSG3 9.625546
4 ENSG4 8.558403
5 ENSG5 8.913645
或者没有。
有人可以解释为什么方法1和方法2不可互换吗?
我相信这是因为'order'强制你的'df'为'matrix',然后对它进行排序。由于'R'中的矩阵只是具有'dim'属性的矢量,输出是第一列的顺序,后面是第二列的顺序。那么,什么索引'df'是一个长度为10的向量。尝试只运行'order'而不使用'df'并查看结果。 –
订单不适用于子集数据框,因为它根本不适用于数据框。当你在向量上调用它时(它恰好是数据框中的列),它确实有效。 – Gregor