首页 > 解决方案 > 在两行上调用类apply函数进行匹配

问题描述

我有一个包含多行的数据框。我想调用一个函数是使用任意两行。例如,假设我有这个数据和这个 myFunc,它接受两个参数:

df <- data.frame(q1=c(1,2,5), q2=c(5,5,5), q3=c(5,2,5), q4=c(5,5,5), q5=c(2,3,1))  
df  
   q1  q2  q3  q4  q5  
1   1   5   5   5   2  
2   2   5   2   5   3  
3   5   5   5   5   1  

myFunc<-function(a,b) sum((df[a,]==df[b,] & df[a,]==5)*1)

想要将 myFunc 应用于第 1 行和第 2 行,myFunc(1,2)并且我期望 2,myFunc 计算在第 1 行和第 2 行之间的同一列下共有多少个“5”。

由于我有数千行,并且我想匹配所有对,因此我想在不编写 for 循环的情况下执行此操作,可能使用 do 调用或 apply 函数系列。

我试过这个:

a=c(1,2)    # match the row 1 and 2    
b=c(2,3)    # match the row 2 and 3    
my_list=list(a,b)

do.call("myFunc", my_list)     

但是我得到了 4,而不是 2 和 2,有什么想法吗?

标签: rdataframelapply

解决方案


尝试传递行而不是行索引

df <- data.frame(q1=c(1,2,5), q2=c(5,5,5), q3=c(5,2,5), q4=c(5,5,5), q5=c(2,3,1))  

myFunc<-function(a,b) sum((a==b & a==5)*1)

myFunc(df[1,],df[2,])

这对我有用(返回 2)


推荐阅读