Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 转换数据帧字符串变量名_R_Get_Transform_Dataframe_Plyr - Fatal编程技术网

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

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\

我有一个包含日期和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\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]]])
   }
}