转换数据帧字符串变量名称

时间:2011-12-05 20:51:39

标签: r get transform dataframe plyr

我有一个包含日期和ID的数据框。我需要根据每个日期向此数据框添加多个列。我使用ddply执行此操作,如下所示:

ddply(df, "dt", transform, new_column1 = myfun(column_name_1))

但是,我有一堆列名,并希望添加多个新列。有没有办法可以传递一个字符串来转换而不是new_column1?例如,我试过:

ddply(df, "dt", transform, get("some_column_name")=myfun(column_name_1))

但这不起作用。另外,如果我将column_name_1作为字符串传递给myfun,我可以在get("column_name_1")中使用myfun来引用该列吗?

更新 不确定如何形成这个更好的

input:
id    date    val
id1   d1      1
id2   d1      2
id3   d1      3
id4   d1      4
id1   d2      10
id2   d2      20
id3   d2      30
id4   d2      40

out(例如2个桶)

id    date    val     bucket
id1   d1      1         1
id2   d1      2         1
id3   d1      3         2
id4   d1      4         2
id1   d2      10        1
id2   d2      20        1
id3   d2      30        2
id4   d2      40        2

1 个答案:

答案 0 :(得分:3)

使用transform做这件事很光滑,但为什么不像

那样更基本
tmpf <- function(x) {
   x[[new_column_name_1]] <- myfun(x[[column_name_1]])
   x[[new_column_name_2]] <- myfun(x[[column_name_2]])
   ...
   x
}
ddply(df,"dt",tmpf)

或者您可以使用列名称向量进行修改,或者即时执行:

tmpf <- function(x,cols=c("column_name_1","column_name_2")) {
   newcols <- paste("new",cols,sep="_")
   for (i in seq_along(cols)) {
      x[[newcols[i]]] <- myfun(x[[cols[i]]])
   }
}

在适当的环境中,assign可能更聪明。

如果我有一个可重复的例子,我可以测试一下。