【发布时间】:2021-12-17 22:16:45
【问题描述】:
我需要计算许多变量的所有成对差异(我的数据集中有 100 个)。 如果 abs 差异 > 1,则应显示为 1,否则结果应为 0。 然后我想总结每个成对比较的 1 和 0 值,并将它们排列成一个矩阵。 我尝试了以下代码,但出现错误消息。
juan<-outer(seq_along(rio_csv), seq_along(rio_csv), FUN =
Vectorize(function(i, j)(sum(ifelse(abs(rio_csv[[i]]-rio_csv[[j]]))>1,1,0))))
虽然该操作适用于两列。
> (pri<-sum(ifelse(abs(rio_csv$V1-rio_csv$V2)>1,1,0)))
感谢您的帮助。
【问题讨论】:
-
请提供一些样本数据 - 内置数据集(例如,
mtcars,如果“足够接近”)或真实数据的复制/可粘贴样本(例如,dput(rio_csv[1:6, 1:5])表示前 5 列的前 6 行)。 -
另外,请不要说“有错误消息”,而是将错误消息放在您的问题中。它们通常非常有用。
-
至于你的报错信息,好像是放错了
)。将(sum(ifelse(abs(rio_csv[[i]]-rio_csv[[j]]))>1,1,0))))更改为(sum(ifelse(abs(rio_csv[[i]]-rio_csv[[j]])>1,1,0))))) -
作为一个小提示,您可以将
sum或meanTRUE/FALSE 值视为 1,将 FALSE 视为 0,因此您的代码中不需要ifelse。您可以简化为sum(abs(rio_csv[[i]] - rio_csv[[j]]) > 1)
标签: r if-statement