从rbind列表构建的data.frame中获取列向量

时间:2014-06-11 03:18:24

标签: r list dataframe coerce

Data.frames似乎保留了数据的底层结构,这有时会很不方便。特别是,我有一个data.frame从两个列表构建(使用rbind组合)。因为维护了基础列表结构,这意味着我不能(轻松地)从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'

我知道我可以通过取消列表解决这些问题,例如df2[order(unlist(df2$a)), ],但我真的希望能够让df2&#34;行为像#34; DF1。特别是因为在我的情况下,其他人可能最终会使用我的代码。有没有一种简单的方法来实现这一点(没有一个接一个地列出每个列)?

0 个答案:

没有答案
相关问题