在R中的列之间应用函数 [英] apply a function across columns in R

查看:12
本文介绍了在R中的列之间应用函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我在R:中有一个数据帧(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)。

使用此函数,我可以找到第一列和另一列(例如第二列)之间的MAD:

mad <- function(dat){
      abs(mean(dat[,1] - dat[,2], na.rm = TRUE))
}
mad(dat = df)

但我希望泛化该函数以应用于所有列。将该函数更改为如下所示:

mad <- function(dat) {
     abs(mean(dat[,1] - dat[,2:4], na.rm = TRUE))
}
mad(dat = df)

不起作用并返回此错误:参数不是数字或逻辑的:返回NA(&Q;)

我正在考虑在整个数据帧中使用Apply(),因为这似乎是我在这里找到的一般建议。但我不明白如何保持第一列不变,并从第一列中减去其他列。

推荐答案

我们可以创建带有两个参数的函数

mad <- function(x, y) abs(mean(x - y, na.rm = TRUE))

并使用sapply/lapply循环1以外的列,通过提取具有循环列值的第一列数据来应用mad函数

sapply(df[-1], function(x) mad(df[,1], x))
#         u           y           z 
#0.003399429 0.991685267 0.710553411 

这篇关于在R中的列之间应用函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆