R 使用依赖于data.table行类型的函数计算幅值
我想计算一个大小,它取决于数据表行的类型:R 使用依赖于data.table行类型的函数计算幅值,r,data.table,R,Data.table,我想计算一个大小,它取决于数据表行的类型: library (data.table) n1 <- c(1,2,3) n2 <- c(10,20,30,40) num <- list(n1,n2) type <- c("price", "volume") dt1 <- data.table (num, type) dt1 [, cons.fun := "sum"] dt1[type=="price", cons.fun := "mean"] > dt1
library (data.table)
n1 <- c(1,2,3)
n2 <- c(10,20,30,40)
num <- list(n1,n2)
type <- c("price", "volume")
dt1 <- data.table (num, type)
dt1 [, cons.fun := "sum"]
dt1[type=="price", cons.fun := "mean"]
> dt1
num type cons.fun
1: 1,2,3 price mean
2: 10,20,30,40 volume sum
而不是预期的:
> dt1
num type cons.fun magnitude
1: 1,2,3 price mean 2
2: 10,20,30,40 volume sum 100
我怎样才能把它做好?谢谢大家! 这里有一种方法。循环遍历行,
获取字符串的值,并在“num”列上应用函数
dt1[, magnitude := get(cons.fun)(num[[1]]), 1:nrow(dt1)]
dt1
# num type cons.fun magnitude
#1: 1,2,3 price mean 2
#2: 10,20,30,40 volume sum 100
或者,由于OP使用的是match.fun
,“cons.fun”可以与mappy
循环,以提取函数对象并将函数应用于相应的列表
列“num”
dt1[, magnitude := mapply(function(x, y) match.fun(x)(y), cons.fun, num)]
亲爱的@akrun,我在data.table语法中找不到第三个参数1:nrow(dt1)
的推理。A好的,它应该在by=
,on=
等前面。它到底是做什么的?谢谢。@fabiocorea这里的1:nrow(dt1)
是用于by
参数的,即我们是按行分组的
dt1[, magnitude := mapply(function(x, y) match.fun(x)(y), cons.fun, num)]