是否有更好的语法来对R中的数据帧进行子集化?

时间:2012-11-01 15:00:19

标签: r dataframe subset

我希望在没有引用数据帧的情况下有条件地对数据帧进行子集化。例如,如果我有以下内容:

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处理得非常漂亮。是否有任何软件包使数据框的子集同样美观?

4 个答案:

答案 0 :(得分:10)

听起来你正在寻找 data.table 包,它实现了索引语法,就像你描述的那样。 (data.table对象本质上是data.frame,具有附加功能,因此您几乎可以在任何使用“普通旧”data.frame的地方继续使用它们。)

该软件包的作者Matthew Dowle在this popular SO [r]-tag question的回答中论证了[.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)

参考: http://www.statmethods.net/management/subset.html

答案 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)