我希望通过一些列,子集,多列数据框,但使用的命令命令没有工作R中的多列数据框的排序和子集?
print(df[order(df$x) & df$x < 5,])
这并不查询结果排序。
要调试这个我生成测试数据帧与1列,但这种“简化”了意想不到的效果
df <- data.frame(x = sample(1:50))
print(df[order(df$x) & df$x < 5,])
,所以我觉得我已经转载了问题,但用简单的数据这并不查询结果排序。
打破的过程中先排序,然后子集化使我发现在这种情况下,顺序不产生数据框对象
df <- data.frame(x = sample(1:50))
ndf <- df[order(df$x),]
print(class(ndf))
产生
[1] "integer"
试图子集合成“整数“ndf对象使用数据帧语法,例如
print(ndf[ndf$x < 5, ])
明显生成错误:
Error in ndf$x : $ operator is invalid for atomic vectors.
简化甚至进一步,我发现子集单独(未施加所述顺序功能)不生成数据帧对象
ndf <- df[df$x < 5,]
class(ndf)
[1] "integer"
原来对于分离排序和子集的多列数据帧确实按预期工作
df <- data.frame(x = sample(1:50), y = rnorm(50))
ndf <- df[order(df$x),]
print(ndf[ndf$x < 5, ])
,这解决了我原来的问题,但导致了两个进一步的问题:
- 为什么对象的类型返回的基础上,1列数据框测试用例,而不是一个数据帧如上所述? (我欣赏1列数据帧只包含一个矢量,但它仍然包裹在一个数据帧中?)
- 是否可以在一个步骤中对多列数据帧进行排序和子集化?
data.frames进行只选择一列时自动简化到载体:http://stackoverflow.com/questions/21025609/how-do-i-extract-a-单列数据帧作为数据帧(可以通过drop = FALSE来防止)。子集和排序是两种不同的操作。你应该在两个逻辑步骤中完成它们(但可能需要一行代码)。 – MrFlick