r - 在两行上调用类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,有什么想法吗?
解决方案
尝试传递行而不是行索引
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)
推荐阅读
- .net - 重复的 Nugets
- python - How to conduct an exact Fisher test when I have more than two groups in Python?
- arrays - 如何在节点 js api 中处理多个不同格式的 xml 有效负载
- android - Graphview不作图
- opencv - 在 OpenCV 中正确旋转图像?
- python - 这些 for 语句在这个目录中是如何工作的?
- javascript - 我在哪里获得 navigator.connection 每个有效类型的吞吐量或下行链路信息
- rust - 如何使用 byteorder crate 读取 usize?
- python - 清理 Tableau 的位置数据
- python - 在 python 中使用 matplot 绘制迷宫图