gpt4 book ai didi

r - 在 R 中的特定值之后将每行的值设置为 NA

转载 作者:行者123 更新时间:2023-12-05 08:47:40 25 4
gpt4 key购买 nike

我正在努力解决 R 中的一些数据问题。我有一个宽数据框,其中包含 10 个 ID 的值、一个数字和五列,用于指定测试是阳性、阴性还是不确定。

df <- data.frame(ID = 1:10, number = rep(1:5, each=2), 
`1`= c(rep(c("pos", "neg"),3), rep("neg", 4)),
`2`= c(NA, NA, rep("pos", 4), "neg", "neg", "pos", "neg"),
`3`= c(rep(NA, 4), rep("pos", 4), "neg", "inconcl"),
`4`= c(rep(NA, 6), rep("pos",3), "neg"),
`5`=c(rep(NA, 8), "pos", "pos"), stringsAsFactors = FALSE)
df
#> ID number X1 X2 X3 X4 X5
#> 1 1 1 pos <NA> <NA> <NA> <NA>
#> 2 2 1 neg <NA> <NA> <NA> <NA>
#> 3 3 2 pos pos <NA> <NA> <NA>
#> 4 4 2 neg pos <NA> <NA> <NA>
#> 5 5 3 pos pos pos <NA> <NA>
#> 6 6 3 neg pos pos <NA> <NA>
#> 7 7 4 neg neg pos pos <NA>
#> 8 8 4 neg neg pos pos <NA>
#> 9 9 5 neg pos neg pos pos
#> 10 10 5 neg neg inconcl neg pos

每行,我想将 X1-X5 列中的正 pos 或不确定的 inconcl 值之后的所有值设置为 NA

预期输出

#>    ID number  X1   X2      X3 X4 X5
#> 1 1 1 pos <NA> <NA> NA NA
#> 2 2 1 neg <NA> <NA> NA NA
#> 3 3 2 pos <NA> <NA> NA NA
#> 4 4 2 neg pos <NA> NA NA
#> 5 5 3 pos <NA> <NA> NA NA
#> 6 6 3 neg pos <NA> NA NA
#> 7 7 4 neg neg pos NA NA
#> 8 8 4 neg neg pos NA NA
#> 9 9 5 neg pos <NA> NA NA
#> 10 10 5 neg neg inconcl NA NA

问题

你如何在 R 中使用 dplyr 做到这一点?

最佳答案

根据 OP 的要求,以下答案在 dplyr 内,它也不依赖于 X 列的数量(即,您可以拥有任意数量的列,答案仍然成立)。

library(tidyverse)

df %>%
pivot_longer(cols = c(-ID, -number)) %>%
mutate(is_pos_inconcl = if_else(value %in% c("pos", "inconcl"), 1, 0)) %>%
group_by(ID, number) %>%
mutate(should_na = cumsum(cumsum(is_pos_inconcl))) %>%
mutate(value = if_else(should_na > 1, NA_character_, value)) %>%
select(ID, number, name, value) %>%
pivot_wider(names_from = "name",
values_from = "value")

诀窍是将数据 reshape 为长格式 (pivot_longer),然后确保条件成立,并使用 cumsum(两次,因为第一个正可以)。最后,使用 pivot_wider 重新构造数据。

关于r - 在 R 中的特定值之后将每行的值设置为 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67125955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com