你如何基于提供的列名通过函数参数来对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