将(复制的)值添加到 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_byDup,如果anyDDTRUE那么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 创建