[英]apply a function across columns in R
假设我在 R 中有一个 dataframe (df):
df <- data.frame(x = rnorm(5, mean = 5), u = rnorm(5, mean = 5), y = rnorm(5, mean = 5), z = rnorm(5, mean = 5))
print(df)
我想获得第一列 (x) 和其他列之间的平均绝对差 (MAD)。
有了这个 function,我可以在第一列和另一列之间找到 MAD(例如第二列):
mad <- function(dat){
abs(mean(dat[,1] - dat[,2], na.rm = TRUE))
}
mad(dat = df)
但我想概括 function 以应用于所有列。 将 function 更改为如下所示:
mad <- function(dat) {
abs(mean(dat[,1] - dat[,2:4], na.rm = TRUE))
}
mad(dat = df)
不起作用并返回此错误:“参数不是数字或逻辑:返回 NA”
我正在考虑在 dataframe 中使用 apply(),因为这似乎是我在这里找到的一般建议。 但我不明白如何保持第一列不变并从第一列中减去其他列。
我们可以用两个 arguments 创建 function
mad <- function(x, y) abs(mean(x - y, na.rm = TRUE))
并使用sapply/lapply
循环除 1 以外的列,通过使用循环列值提取第一列数据来应用mad
function
sapply(df[-1], function(x) mad(df[,1], x))
# u y z
#0.003399429 0.991685267 0.710553411
这是另一个没有定义mad
function 的选项:
sapply(abs(df[-1] - df[["x"]]), mean, na.rm = TRUE)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.