Data.frames 似乎保留了数据的底层结构,这有时会带来不便。特别是,我有一个由两个列表(使用 rbind 组合)构造的 data.frame。因为维护了底层列表结构,这意味着我不能(轻松)从 data.frame 中提取列向量,并且经常在列向量上运行的函数不起作用。有没有办法将 data.frame 的底层结构转换为更“可预测”的格式。
这是一个简单的例子:
df1 <- data.frame(a = 2:1, b = 4:3) # "standard" data.frame
df2 <- data.frame(rbind(list(a = 2, b = 4), # "sad" data.frame
list(a = 1, b = 3)))
快速检查str(df1$a)
并str(df2$a)
显示前者是一个向量,而后者是一个列表。因此,这混淆了我们可能会尝试对 data.frame 执行的一些常见操作,例如,尝试通过以下方式对 data.frame 进行排序:
df1[order(df1$a), ] # works fine
df2[order(df2$a), ] # returns: Error in order(df2$a) : unimplemented
# type 'list' in 'orderVector1'
我知道我可以使用 unlist 解决这些问题,例如 ,df2[order(unlist(df2$a)), ]
但我真的希望能够让 df2 “像”df1 一样。特别是因为在我的情况下,其他人可能最终会使用我的代码。有没有一种简单的方法来实现这一点(无需逐一列出每一列)?