你如何基于提供的列名通过函数参数来对R数据框进行子集化?

问题描述:

我试图根据提供的参数来创建一个R函数根据给定的数据帧的第一个参数上,子集数据帧:你如何基于提供的列名通过函数参数来对R数据框进行子集化?

例如,我的DF是这样的:

Date  Server1 Server2 Server3 Server4 
1/1/2004  10  20  10  5 
2/1/2014  4  4  4  20 
3/2/2014  1  5  5  39 

我需要这个子集DF:

例如,如果我通过这个函数(X,服务器1,服务器3和服务器),它看起来就像这样:

data<-function(x, ...) { 

subset(x, select=c("Server1","Server3", "Server4")) 
} 

但是,我不应该知道参数列表。它应该适用于所有不知道列名的数据帧。

任何想法如何在R中完成这个任务?

如果你通过参数作为字符串应该会正常工作是这样的:

subset2<-function(x, ...) { 
    cols <- c(...) 
    subset(x, select=cols) 
} 

subset2(dat, "Server1", "Server3", "Server4") 

但我不知道为什么这样的包装是必要的。也许我错过了你的真正目标是什么?

也许你应该重新考虑围绕subset的包装函数是否真的有必要。据我所知,你想要的功能与subset本身一样,并且需要与sintax略有不同的相同参数。

在任何情况下,如果您不知道列名称,则可以使用列索引(例如subset(x, select=c(1,3,4))。

摆脱子集,就像在其帮助页面上它特别说明了它仅用于交互式使用的警告。我没有看到这里的问题,你可以简单地做到以下几点:

data<-function(x, select, ...) { 
    tmp <- x[select] 
    # do some stuff with it 
    return(tmp) 
} 

一个简单的例子:

data(iris, c("Sepal.Width", "Species")) 
#  Sepal.Width Species 
# 1   3.5  setosa 
# 2   3.0  setosa