重新排序R数据帧中的列

时间:2015-01-24 00:10:07

标签: r dataframe

此代码:

df <- structure(c(0.162568559415789, 0.21553449994005, 0.189530046160695, 
0.136847489883353, 0.178477010023321, 0, 0.168176796512036, 0.330921388911015, 
0.347470738098292, 0.168868189119251, 0.161459232469667, 0.540106475382717, 
0.487429698101744, 0.374124445062667, 0.319174414140653, 0.467838144637299, 
0.497981004663612, 0.283910424346759, 0.181824945970431, 0.0794196660862671, 
0.14382480160036, 0.226446176360097, 0.1620827528434, 0.175983100270524
), .Dim = c(6L, 4L), .Dimnames = list(c("lincR-Agpat9-3AS8Kk-3ASK3K", 
"lincR-Asap1-3SS3Rik-5S-13K", "lincR-Lbh-3-4K470KKKSK-13K", "lincR-Mapk9-3S2096K-3S", 
"lincR-Tbl1xr1-5-0K4K6KS13K", "lincR-Zfand2a-5SSik-3S3K3K"), 
    c("naive", "a", "b", "c")))

产生这个:

> df
                               naive         a         b          c
lincR-Agpat9-3AS8Kk-3ASK3K 0.1625686 0.1681768 0.4874297 0.18182495
lincR-Asap1-3SS3Rik-5S-13K 0.2155345 0.3309214 0.3741244 0.07941967
lincR-Lbh-3-4K470KKKSK-13K 0.1895300 0.3474707 0.3191744 0.14382480
lincR-Mapk9-3S2096K-3S     0.1368475 0.1688682 0.4678381 0.22644618
lincR-Tbl1xr1-5-0K4K6KS13K 0.1784770 0.1614592 0.4979810 0.16208275
lincR-Zfand2a-5SSik-3S3K3K 0.0000000 0.5401065 0.2839104 0.17598310

我想要做的是按以下方式重新排序该数据框。 但为什么失败了呢?

> df[c("naive","b","c","a")]
[1] NA NA NA

1 个答案:

答案 0 :(得分:2)

这是一个矩阵,而不是数据框。使用逗号

df[, c("naive", "b", "c", "a")]

一种简单的方法来区分dput()输出的区别是(1)缺少class属性(对于数据框,它会说&#34; data.frame&#34; ),以及(2)包含.Dimnames(在数据框中,它会为列名称.Names和行名称row.names

当然,最好的方法是检查

class(df)
# [1] "matrix"

对于矩阵子集,您需要使用逗号来按列访问。在数据框中,您不会。