繁体   English   中英

跨 R 中的列应用 function

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM