将(复制的)值添加到 R 中的重复行
Add a (copied) value to duplicated row in R
我想复制一个行值,以防它在另一列中重复。
# A tibble: 10 x 3
pat_id Dup DD
1 1 1 TRUE
2 2 1 NA
3 3 3 FALSE
4 4 4 NA
5 5 5 TRUE
6 6 5 NA
7 7 7 FALSE
8 8 7 NA
9 9 9 FALSE
10 10 10 TRUE
sample <- data.frame(pat_id = c(1,2,3,4,5,6,7,8,9,10),
Dup = c(1,1,3,4,5,5,7,7,9,10),
DD = c("TRUE", "NA","FALSE", "NA", "TRUE", "NA","FALSE","NA","FALSE","TRUE"))
Dup 列有重复项。列 DD 显示其中之一的 TRUE/FALSE,它也有很多 NA 值。如果 Dup 重复,我希望列 DD 显示相同的值。如果没有重复且 DD 显示 NA,则它应该变为 FALSE。
我想获得以下输出。
pat_id Dup DD DDx
1 1 1 TRUE TRUE
2 2 1 NA TRUE
3 3 3 FALSE FALSE
4 4 4 NA FALSE
5 5 5 TRUE TRUE
6 6 5 NA TRUE
7 7 7 FALSE FALSE
8 8 7 NA FALSE
9 9 9 FALSE FALSE
10 10 10 TRUE TRUE
我已经用复制函数试过了,但这不允许我将另一个列值复制到复制的行。
提前谢谢你。
这是一种可能的方法。首先group_by
Dup
,如果any
DD
是TRUE
那么xDD
应该是TRUE
。现在我们必须用 ifelse
去掉 NA
值。如果新列是 NA
那么它应该是 FALSE
否则它应该是它的值。
library(dplyr)
sample <- data.frame(pat_id = c(1,2,3,4,5,6,7,8,9,10),
Dup = c(1,1,3,4,5,5,7,7,9,10),
DD = c("TRUE", "NA","FALSE", "NA", "TRUE", "NA","FALSE","NA","FALSE","TRUE"))
sample %>%
group_by(Dup) %>%
mutate(xDD = any(as.logical(DD)) %>% ifelse(is.na(.), FALSE, .))
#> # A tibble: 10 x 4
#> # Groups: Dup [7]
#> pat_id Dup DD xDD
#> <dbl> <dbl> <chr> <lgl>
#> 1 1 1 TRUE TRUE
#> 2 2 1 NA TRUE
#> 3 3 3 FALSE FALSE
#> 4 4 4 NA FALSE
#> 5 5 5 TRUE TRUE
#> 6 6 5 NA TRUE
#> 7 7 7 FALSE FALSE
#> 8 8 7 NA FALSE
#> 9 9 9 FALSE FALSE
#> 10 10 10 TRUE TRUE
由 reprex package (v2.0.1)
于 2022-03-08 创建
我想复制一个行值,以防它在另一列中重复。
# A tibble: 10 x 3
pat_id Dup DD
1 1 1 TRUE
2 2 1 NA
3 3 3 FALSE
4 4 4 NA
5 5 5 TRUE
6 6 5 NA
7 7 7 FALSE
8 8 7 NA
9 9 9 FALSE
10 10 10 TRUE
sample <- data.frame(pat_id = c(1,2,3,4,5,6,7,8,9,10),
Dup = c(1,1,3,4,5,5,7,7,9,10),
DD = c("TRUE", "NA","FALSE", "NA", "TRUE", "NA","FALSE","NA","FALSE","TRUE"))
Dup 列有重复项。列 DD 显示其中之一的 TRUE/FALSE,它也有很多 NA 值。如果 Dup 重复,我希望列 DD 显示相同的值。如果没有重复且 DD 显示 NA,则它应该变为 FALSE。 我想获得以下输出。
pat_id Dup DD DDx
1 1 1 TRUE TRUE
2 2 1 NA TRUE
3 3 3 FALSE FALSE
4 4 4 NA FALSE
5 5 5 TRUE TRUE
6 6 5 NA TRUE
7 7 7 FALSE FALSE
8 8 7 NA FALSE
9 9 9 FALSE FALSE
10 10 10 TRUE TRUE
我已经用复制函数试过了,但这不允许我将另一个列值复制到复制的行。 提前谢谢你。
这是一种可能的方法。首先group_by
Dup
,如果any
DD
是TRUE
那么xDD
应该是TRUE
。现在我们必须用 ifelse
去掉 NA
值。如果新列是 NA
那么它应该是 FALSE
否则它应该是它的值。
library(dplyr)
sample <- data.frame(pat_id = c(1,2,3,4,5,6,7,8,9,10),
Dup = c(1,1,3,4,5,5,7,7,9,10),
DD = c("TRUE", "NA","FALSE", "NA", "TRUE", "NA","FALSE","NA","FALSE","TRUE"))
sample %>%
group_by(Dup) %>%
mutate(xDD = any(as.logical(DD)) %>% ifelse(is.na(.), FALSE, .))
#> # A tibble: 10 x 4
#> # Groups: Dup [7]
#> pat_id Dup DD xDD
#> <dbl> <dbl> <chr> <lgl>
#> 1 1 1 TRUE TRUE
#> 2 2 1 NA TRUE
#> 3 3 3 FALSE FALSE
#> 4 4 4 NA FALSE
#> 5 5 5 TRUE TRUE
#> 6 6 5 NA TRUE
#> 7 7 7 FALSE FALSE
#> 8 8 7 NA FALSE
#> 9 9 9 FALSE FALSE
#> 10 10 10 TRUE TRUE
由 reprex package (v2.0.1)
于 2022-03-08 创建