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

Ben*_*ley 7 r subset dataframe

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

long_data_frame_name <- data.frame(x=1:10, y=1:10)
Run Code Online (Sandbox Code Playgroud)

我想说:

subset <- long_data_frame_name[x < 5,]
Run Code Online (Sandbox Code Playgroud)

但相反,我不得不说:

subset <- long_data_frame_name[long_data_frame_name$x < 5,]
Run Code Online (Sandbox Code Playgroud)

plyr和ggplot处理得非常漂亮.是否有任何软件包可以使数据框的子集同样美观?

Jos*_*ien 10

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

该软件包的作者Matthew Dowle [.data.table()在回答这个流行的SO [r] -tag问题时论证了索引语法的优点.他的回答也可以写成对你上述问题的直接回答!

这是一个例子:

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
Run Code Online (Sandbox Code Playgroud)

  • @BenHaley - 还要注意`subset()`有其自身的缺点.特别是,不要尝试以编程方式使用它(即在你编写的任何函数中); 它基本上是用于交互式使用,甚至在`?subset`中都有一个警告. (3认同)
  • @Ben请注意`data.table`s和`data.frame`不能完全互换.另外,我不确定我是否只是为了基本语言有效支持的语法约定而加载额外的库. (2认同)

Dav*_*jad 5

是:

newdata <- subset(mydata, sex=="m" & age > 25)
Run Code Online (Sandbox Code Playgroud)

要么

newdata <- subset(mydata, sex=="m" & age > 25 , select=weight:income)
Run Code Online (Sandbox Code Playgroud)

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