【发布时间】:2014-11-29 19:29:56
【问题描述】:
我有一个数据框,我想使用 dplyr 的 mutate() 函数创建一个新列 prob。 prob 应该包括概率 P(行值 > 所有列值)数据框中的行值大于每个行值。这是我想做的:
data = data.frame(value = c(1,2,3,3,4,4,4,5,5,6,7,8,8,8,8,8,9))
require(dplyr)
data %>% mutate(prob = sum(value < data$value) / nrow(data))
这给出了以下结果:
value prob
1 1 0
2 2 0
3 3 0
4 3 0
... ... ...
这里prob 每行只包含 0。如果我在表达式sum(value < data$value) 中将value 替换为2:
data %>% mutate(prob = sum(2 < data$value) / nrow(data))
我得到以下结果:
value prob
1 1 0.8823529
2 2 0.8823529
3 3 0.8823529
4 3 0.8823529
... ... ...
0.8823529 是数据框中存在大于 2 的行的概率。问题似乎是 mutate() 函数不接受 value 列作为 sum() 函数内的参数。
【问题讨论】:
-
mutate?dplyr?你想要sapply(data$value,function(x)sum(x < data$value) / nrow(data))? -
谢谢!保持简单——好主意……
-
@Simen,您可以将 agstudy 的代码稍微修改为 dplyr:data %>% mutate(prob = sapply(value, function(x) sum(x
-
如果它有效,它可能就是答案。您能否检查/勾选答案以结案? :)
标签: r sum dataframe probability dplyr