在R中,根据与另一列中的rowname匹配的列名替换rowvalues

oknrviil  于 2023-03-27  发布在  其他
关注(0)|答案(1)|浏览(89)

如果列名与另一列的行名匹配,我希望R用NA值替换行。例如,如果个体123最后一次在数组6中注册(Very.last=Last.6),它将用NA替换Last.6中的时间。
例如:之前
| 识别号|最后5个|最后6个| Very.last |
| - ------|- ------|- ------|- ------|
| 一百二十三|2021-05-03 2021-05-03 2021-05-03|2021年5月4日|最后8|
| 一百二十四|二○二一年四月一日|二○二一年四月十五日|最后6个|
将其最后一次注册替换为NA后:
| 识别号|最后5个|最后6个| Very.last |
| - ------|- ------|- ------|- ------|
| 一百二十三|2021-05-03 2021-05-03 2021-05-03|2021年5月4日|最后8|
| 一百二十三|二○二一年四月一日|不适用|最后6个|
有什么建议吗?
尝试过使用dplyr::filter,但不确定如何根据与某个人的列名匹配的行名称进行过滤。

yptwkmov

yptwkmov1#

dplyr::across()中使用cur_column()来针对Very.last测试每个列名。

library(dplyr)

dat %>%
  mutate(across(
    Last.1:Last.4,
    ~ if_else(cur_column() == Very.last, NA_real_, .x)
  ))
# A tibble: 4 × 6
     ID Last.1 Last.2 Last.3 Last.4 Very.last
  <int>  <dbl>  <dbl>  <dbl>  <dbl> <chr>    
1   121  7.10    9.62  8.73   NA    Last.4   
2   122  2.46   NA     0.411   5.66 Last.2   
3   123 NA       5.74  6.61    5.94 Last.1   
4   124  0.914   7.64 NA       3.65 Last.3
  • 示例数据:*
set.seed(13)

dat <- tibble::tibble(ID = 121:124)

for (i in 1:4) {
  dat[[paste0("Last.", i)]] <- runif(4, 0, 10)
}

dat[["Very.last"]] <- paste0("Last.", sample(4))

相关问题