R 转换数据帧字符串变量名
我有一个包含日期和id的数据框。我需要根据每个日期在此数据框中添加多个列。我使用R 转换数据帧字符串变量名,r,get,transform,dataframe,plyr,R,Get,Transform,Dataframe,Plyr,我有一个包含日期和id的数据框。我需要根据每个日期在此数据框中添加多个列。我使用ddply执行以下操作: ddply(df,“dt”,transform,new\u column1=myfun(column\u name\u 1)) 但是,我有一组列名,并希望添加多个新列。有没有一种方法可以将字符串传递给transform而不是new_column1?例如,我尝试: ddply(df,“dt”,transform,get(“some\u column\u name”)=myfun(column\
ddply
执行以下操作:
ddply(df,“dt”,transform,new\u column1=myfun(column\u name\u 1))
但是,我有一组列名,并希望添加多个新列。有没有一种方法可以将字符串传递给transform而不是new_column1?例如,我尝试:
ddply(df,“dt”,transform,get(“some\u column\u name”)=myfun(column\u name\u 1))
但这是行不通的。此外,如果我将列名称\u 1
作为字符串传递给myfun,我可以在myfun
中使用get(“列名称\u 1”)
来引用该列吗
更新:
不知道如何更好地格式化此文件
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
输出(例如,对于2个铲斗)
用
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是的,这就是我目前所做的。我正试着按照你的建议对assign做些什么,但在语法上无法让它正常工作。不过你的答案很好,谢谢!不明白为什么你需要ddply
-你对每个小组都做了同样的事情!另请参见plyr::rename
也许myfun
类似于function(x)x/mean(x)
,因此我们必须一组一组地转换位,而不是一次转换。(一个可复制的例子可以解决其中一些问题…)我刚刚更新了我的问题。基本思想是我有一组日期,对于每个日期,我有一组id,我想根据每个日期的id值来存储这些id(因此每个日期都有一组1…N的存储桶)。如果有比ddply更有效的方法,请让我知道。这个解决方案的问题是,我不能从我的函数中修改数据帧,因为R按值传递所有内容;找不到如何在R中按引用传递如果存在,要创建代码块,只需将块中的行缩进四个空格即可。(通常,有关更多格式规则,请参见编辑框右上角的?
)。
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]]])
}
}