我正在学习 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/