r - 将函数应用于除当前行之外的所有行 (dplyr)

标签 r dplyr

我正在学习 dplyr R 包,到目前为止真的很喜欢它。我需要做的一件事是创建一个新列,其每一行的值是将函数应用于除当前行以外的所有行(可能按组划分)的结果,但我想不出一种简洁的方法.

一个人为的例子是

library(datasets)
library(dplyr)

data(mtcars)
x <- mtcars %>% mutate(name=rownames(mtcars)) %>% filter(cyl==4) %>% select(name,cyl,mpg)

# This is what I want to do more elegantly
x$othermpg <- NA
for (i in 1:nrow(x))
    x$othermpg[i] <- mean(x$mpg[-i])

在这里,othermpg列获取 mpg 的平均值除当前行中的汽车之外的所有汽车的值。

请问有人可以帮忙吗?

最佳答案

对于示例案例,您可以使用以下代码来避免 for 循环。基本上,不是排除“当前”行,您只需从总数中减去它:

library(dplyr)

x %>% mutate(othermpg2 = (sum(mpg)-mpg) / (length(mpg) -1 ))

#             name cyl  mpg othermpg othermpg2
#1      Datsun 710   4 22.8    27.05     27.05
#2       Merc 240D   4 24.4    26.89     26.89
#3        Merc 230   4 22.8    27.05     27.05
#4        Fiat 128   4 32.4    26.09     26.09
#5     Honda Civic   4 30.4    26.29     26.29
#6  Toyota Corolla   4 33.9    25.94     25.94
#7   Toyota Corona   4 21.5    27.18     27.18
#8       Fiat X1-9   4 27.3    26.60     26.60
#9   Porsche 914-2   4 26.0    26.73     26.73
#10   Lotus Europa   4 30.4    26.29     26.29
#11     Volvo 142E   4 21.4    27.19     27.19

如果您觉得这不适用于您的真实数据,请使用更具代表性的示例编辑您的问题。

关于r - 将函数应用于除当前行之外的所有行 (dplyr),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25259661/

相关文章:

datetime - 计算R中2个日期之间的工作日数

r - 使用R中函数内的字符串为变量分配名称并保存

python - 从测序数据中解析信息

R:如何从 for 循环而不是索引输出因子水平?

r - 使用带有 loess fit 的扫帚(增强)和 dplyr 时出错

r - dplyr 根据列名称过滤特定值

r - 未知时区 'localtime'

r - 变异多个变量以创建多个新变量

r - dplyr:选择除向量中包含的变量之外的所有变量

r - 如何使用 "not equal to"创建函数?