我需要在数据帧的所有行上应用函数。这些函数的参数将是两个向量,
例如,
f <- function(vec1,vec2)
{ return(sum(vec1) - sum(vec2))
}
现在我需要在我的数据帧的所有行上应用它,这样我就可以填充矩阵中的所有值并使用该矩阵进行分析。
df <- data.frame(A=c(1,2,3,4),B=c(3,4,3,4),C=c(5,6,4,5))
应用此功能应该提供以下矩阵
答案 0 :(得分:1)
试试这个:
m <- diag(nrow(df))
s <- rowSums(df)
r <- combn(nrow(df), 2, function(x) c(s[x[1]]-s[x[2]],s[x[2]]-s[x[1]]))
m[lower.tri(m, diag = F)] <- r[1,]
m <- t(m)
m[lower.tri(m, diag = F)] <- r[2,]
diag(m) <- 0
# [,1] [,2] [,3] [,4]
# [1,] 0 -3 -1 -4
# [2,] 3 0 2 -1
# [3,] 1 -2 0 -3
# [4,] 4 1 3 0
如果您坚持使用自己定义的函数f
,请执行以下操作:
m <- diag(nrow(df))
r <- combn(nrow(df), 2, function(x) c(f(df[x[1],],df[x[2],]), f(df[x[2],],df[x[1],])))
m[lower.tri(m, diag = F)] <- r[1,]
m <- t(m)
m[lower.tri(m, diag = F)] <- r[2,]
diag(m) <- 0