将函数列表应用于R中另一个数据帧中的行



朋友们,我是R的新手,但我遇到了其中一个问题。问题是,我在数据帧中有一列具有数学函数(mean、min、max等),我有另一个数据帧,具有与函数相同的行数,我想将这些特定函数应用于数据帧。

下面是具有特定数学函数的df

  var1   funct
1    A     min
2    B     max
3    C     mean
4    D     min

以下是需要应用这些功能的df(在行上)

  a1 b1 c1 d1
1  4  8 12 15
2  NA 9 13 16
3  6 10 NA 17
4  7 11 15 18

假设第一个fn需要应用于第一行,依此类推。有人能帮上忙吗?我尝试过do.call,parse(eval),但失败了。注意有NA,但是,我想要每行的结果(即排除NA,但不删除行本身)

问候,

试试这个:

df2 <- read.csv(textConnection("a1,b1,c1,d1
4,8,12,15
NA,9,13,16
6,10,NA,17
7,11,15,18"))

df1 <- read.csv(textConnection("var1,funct
A,min
B,max
C,mean
D,min"))
df1$funct <- as.character( df1$funct)
x <- mapply(do.call,
       as.list(df1$funct),
       lapply(split(df2,seq(nrow(df2))),
              function(x)list(na.omit(unlist(x)))))

lapply(split(...),list))是因为do.call要求它的第二个参数是列表。)

调用函数为df1的第一个数据帧和行为df2的数据帧,然后

mapply(function(f,x) get(f)(x,na.rm=TRUE), df1$funct, as.data.frame(t(df2)))

将产生

 min  max mean  min 
   4   16   11    7 

相关内容

最新更新