【问题标题】:In R, replace rowvalues based on colname matching rowname in another column在 R 中,根据 colname 匹配另一列中的行名替换行值
【发布时间】:2022-11-03 19:43:59
【问题描述】:

如果 R 的列名与另一列的行名匹配,我希望 R 用 NA 替换行。例如,如果个人 123 上次在数组 6 中注册 (Very.last=Last.6),它将用 NA 替换 Last.6 中的时间。

例如。前

ID Last.5 Last.6 Very.last
123 Time Time Last.8
124 Time Time Last.6

用 NA 替换其最后一次注册后:

ID Last.8 Last.9 Very.last
123 Time Time Last.8
123 Time NA Last.6

有什么建议么?

已尝试使用 dplyr::filter,但不确定如何根据与特定个人的 colname 匹配的行名进行过滤。

【问题讨论】:

  • 为什么第二个df中的colnames发生了变化?

标签: r dplyr replace matching rowname


【解决方案1】:

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))

【讨论】:

    猜你喜欢
    • 2016-11-22
    • 1970-01-01
    • 2017-03-04
    • 2021-06-21
    • 2016-06-14
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 2016-12-05
    相关资源
    最近更新 更多