7

我想有条件地对数据框进行子集化而不引用数据框。例如,如果我有以下内容:

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

4 回答 4

10

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

包的作者 Matthew Dowle在他对这个流行的 SO [r]-tag 问题[.data.table()的回答中论证了 's 索引语法的优势。他在那里的回答也可以直接回答你上面的问题!

这是一个例子:

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
于 2012-11-01T15:20:33.590 回答
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

于 2012-11-01T16:00:01.403 回答
4

美丽是主观的,不是吗?为了分享其他解决方案,还有这个sqldf包:

library(sqldf)
subset <- sqldf("select * from long_data_frame_name where x < 5")
于 2012-11-01T16:11:38.250 回答
3

尝试 dplyr,在发布并回答此问题后发布。它非常适合许多常见的数据帧处理任务。

library(dplyr)
subset <- filter(long_data_frame_name, x > 5)

或者,等效地:

subset <- long_data_frame_name %>% filter(x > 5)
于 2014-11-18T02:23:17.393 回答