R按组按筛选值填写新列
我想在我的R按组按筛选值填写新列,r,filter,dplyr,expand,R,Filter,Dplyr,Expand,我想在我的dat中创建一个新列,由值填充 满足一个条件。因此,我想保留值其中区域==“SA”并将该值填入整个组的新列vals.SA 这结合了过滤器和变异,但我不确定它们的正确组合是什么Filter仅保持行满足条件,但如何将此值扩展到组中的所有行 我的数据: dat <- data.frame(id = c(1,1,2,2,2,2,3,3), regime = c("SA", "B", "SA", "B", "C", "F", "SA", "D"),
dat
中创建一个新列,由值填充
满足一个条件。因此,我想保留值
其中区域==“SA”
并将该值填入整个组的新列vals.SA
这结合了过滤器
和变异
,但我不确定它们的正确组合是什么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))
填入val.sa
值对应的预期输出region==“sa”
id区域值val.sa
1 SA 3 3
2 1 B 5 3
3 2 SA 1 1
42B21
52C51
6 2 F 6 1
7 3南非7 7
83D87
首先创建一个新列val.sa
,其中sa
行中的值等于value
列中的值。然后按id
和fill
向下分组。像这样:
dat %>%
mutate(val.sa = ifelse(regime == 'SA', value, NA)) %>%
group_by(id) %>%
fill(val.sa)
## A tibble: 8 x 4
## Groups: id [3]
# id regime value val.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
dat%>%
变异(val.sa=ifelse(区域='sa',值,NA))%>%
分组依据(id)%>%
填充(val.sa)
##一个tibble:8x4
##组别:id[3]
#id系统值val.sa
#
#1 SA 3 3
#2 1 B 5 3
#3 2 SA 1 1
#42B21
#52C51
#6 2 F 6 1
#7 3南非7 7
#83D87
首先创建一个新列val.sa
,其中sa
行中的值等于value
列中的值。然后按id
和fill
向下分组。像这样:
dat %>%
mutate(val.sa = ifelse(regime == 'SA', value, NA)) %>%
group_by(id) %>%
fill(val.sa)
## A tibble: 8 x 4
## Groups: id [3]
# id regime value val.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
dat%>%
变异(val.sa=ifelse(区域='sa',值,NA))%>%
分组依据(id)%>%
填充(val.sa)
##一个tibble:8x4
##组别:id[3]
#id系统值val.sa
#
#1 SA 3 3
#2 1 B 5 3
#3 2 SA 1 1
#42B21
#52C51
#6 2 F 6 1
#7 3南非7 7
#83D87
您可以使用:
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
您可以使用:
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
如果每个组中只有一个
SA
,则此操作应无任何错误:
dat %>%
group_by(id) %>%
mutate(val.sa = value[regime == "SA"])
#> # A tibble: 8 x 4
#> # Groups: id [3]
#> 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
如果每个组中只有一个
SA
,则此操作应无任何错误:
dat %>%
group_by(id) %>%
mutate(val.sa = value[regime == "SA"])
#> # A tibble: 8 x 4
#> # Groups: id [3]
#> 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)
library(tidyr)
dat %>%
mutate(val.sa = case_when(regime == 'SA' ~ value) %>%
group_by(id) %>%
fill(val.sa)
当
library(dplyr)
library(tidyr)
dat %>%
mutate(val.sa = case_when(regime == 'SA' ~ value) %>%
group_by(id) %>%
fill(val.sa)