【发布时间】:2023-08-10 03:26:01
【问题描述】:
给定一个半长格式的 df,其中 id 变量为 a 和 b,测量数据列在 m1 和 m2 中。数据类型由变量v(值var1 和var2)指定。
set.seed(8)
df_l <-
data.frame(
a = rep(sample(LETTERS,5),2),
b = rep(sample(letters,5),2),
v = c(rep("var1",5),rep("var2",5)),
m1 = sample(1:10,10,F),
m2 = sample(20:40,10,F))
看起来像:
a b v m1 m2
1 W r var1 3 40
2 N l var1 6 32
3 R a var1 9 28
4 F g var1 5 21
5 E u var1 4 38
6 W r var2 1 35
7 N l var2 8 33
8 R a var2 10 29
9 F g var2 7 30
10 E u var2 2 23
如果我想在 m1 中使用 id a 作为行和在 v1 作为列中的值,我会这样做:
> reshape2::dcast(df_l, a~v, value.var="m1")
a var1 var2
1 E 4 2
2 F 5 7
3 N 6 8
4 R 9 10
5 W 3 1
我如何编写一个函数来执行此操作,将 dcast(行、列和 value.var)的参数作为参数提供,例如:
fun <- function(df,row,col,val){
require(reshape2)
res <-
dcast(df, row~col, value.var=val)
return(res)
}
我检查了 SO here 和 here 以尝试使用 match.call 和 eval(substitute()) 的变体,以便“获取”函数内的参数,并尝试使用 lazyeval 包。没有成功。
我在这里做错了什么?如何让 dcast 识别变量名?
【问题讨论】:
标签: r function casting arguments reshape2