重新排序 R 数据框中的列

Reordering column in 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

那是矩阵,不是数据框。使用逗号

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

区分 dput() 输出的一个简单方法是 (1) 缺少 class 属性(对于数据框来说 "data.frame"),以及(2) 包含 .Dimnames(在数据框中,列名称为 .Names,行名称为 row.names)。

当然,最好的方法就是检查

class(df)
# [1] "matrix"

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