【问题标题】: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 匹配的行名进行过滤。
【问题讨论】:
标签:
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))