我希望在没有引用数据帧的情况下有条件地对数据帧进行子集化。例如,如果我有以下内容:
long_data_frame_name <- data.frame(x=1:10, y=1:10)
我想说:
subset <- long_data_frame_name[x < 5,]
但相反,我不得不说:
subset <- long_data_frame_name[long_data_frame_name$x < 5,]
plyr和ggplot处理得非常漂亮。是否有任何软件包使数据框的子集同样美观?
答案 0 :(得分:10)
听起来你正在寻找 data.table 包,它实现了索引语法,就像你描述的那样。 (data.table
对象本质上是data.frame
,具有附加功能,因此您几乎可以在任何使用“普通旧”data.frame的地方继续使用它们。)
[.data.table()
索引语法的优点。他的回答也可以写成对你上述问题的直接回应!
以下是一个例子:
library(data.table)
long_data_table_name <- data.table(x=1:10, y=1:10)
subset <- long_data_table_name[x < 5, ]
subset
# x y
# 1: 1 1
# 2: 2 2
# 3: 3 3
# 4: 4 4
答案 1 :(得分:5)
是:
newdata <- subset(mydata, sex=="m" & age > 25)
或
newdata <- subset(mydata, sex=="m" & age > 25 , select=weight:income)
答案 2 :(得分:4)
美是主观的,不是吗?为了共享其他解决方案,还有sqldf
包:
library(sqldf)
subset <- sqldf("select * from long_data_frame_name where x < 5")
答案 3 :(得分:3)
尝试dplyr,在发布并回答此问题后发布。它非常适合许多常见的数据帧重复任务。
library(dplyr)
subset <- filter(long_data_frame_name, x > 5)
或等同于:
subset <- long_data_frame_name %>% filter(x > 5)