如何通过函数参数根据提供的列名称对R数据框进行子集?

时间:2014-09-10 17:25:59

标签: 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,Server1,Server3,Server4),它将如下所示:

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

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

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

我有什么想法可以在R中完成这个?

3 个答案:

答案 0 :(得分:1)

如果您将参数作为字符串传递,它应该可以正常工作:

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

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

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

答案 1 :(得分:0)

也许您应该重新考虑是否真的需要围绕subset的包装函数。据我所知,你的预期函数与subset本身的作用相同,并且需要相同的参数,并且sintax略有不同。

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

答案 2 :(得分:0)

删除子集,就像在其帮助页面上一样,它在一个警告中明确指出它仅用于交互式使用。我没有在这里看到问题,您可以简单地执行以下操作:

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