r - R按组过滤值填充新列
问题描述
我想在我的 中创建新列dat
,用满足条件的值填充。所以,我想保留value
where whereregime == "SA"
并在 new column 的整个组中填充这个值vals.sa
。
这结合了filter
and mutate
,但我不确定它们的正确组合是什么?Filter
只是保持满足条件的行,但是如何将这个值扩展到组中的所有行?
我的数据:
dat <- data.frame(id = c(1,1,2,2,2,2,3,3),
regime = c("SA", "B", "SA", "B", "C", "F", "SA", "D"),
value = c(3,5,1,2,5,6,7,8))
使用处理数据dplyr
dat %>%
# group data by id
group_by(id) %>%
# how to write this condition and get values instead or TRUE/FALSE?
mutate(val.sa = regime == "SA")
对应的填充val.sa
值的预期输出regime == "SA"
id regime value val.sa
<dbl> <fct> <dbl> <dbl>
1 1 SA 3 3
2 1 B 5 3
3 2 SA 1 1
4 2 B 2 1
5 2 C 5 1
6 2 F 6 1
7 3 SA 7 7
8 3 D 8 7
解决方案
您可以使用 :
library(dplyr)
dat %>%
group_by(id) %>%
mutate(value.sa = value[regime == 'SA'])
#OR
#mutate(value.sa = value[match('SA', regime)])
# id regime value value.sa
# <dbl> <chr> <dbl> <dbl>
#1 1 SA 3 3
#2 1 B 5 3
#3 2 SA 1 1
#4 2 B 2 1
#5 2 C 5 1
#6 2 F 6 1
#7 3 SA 7 7
#8 3 D 8 7
如果组中可能有多个regime
具有值的值,则可以使用/"SA"
选择第一个值。which.max
match
dat %>%
group_by(id) %>%
mutate(value.sa = value[which.max(regime == 'SA')])
推荐阅读
- javascript - 观察者是 RxJS 中 Observable 的“听众”吗?
- c# - When i added buttons in array. I got an error " An array initializer of length "12" is required"
- intersystems-cache - 统计每个字符出现的次数,即每个字母、数字和标点字符被使用了多少次
- perl - 以编程方式从 gmail url 下载电子邮件正文
- reporting-services - 转至行动报告。没有后退选项
- oracle - SQLDeveloper,有错误的 Oracle 过程
- python - 当启用急切执行时,传递给 Optimizer.compute_gradients 的 `loss` 应该是一个函数
- drmaa - Blender中基于DRM的计算
- asp.net - 我可以防止我的 asp.net mvc-4 Web 应用程序中的 Elmah 暴露用户的密码吗
- r - 是否有代码可以在 dplyr 等 R 安装包中查找函数的数量