对于R中的循环,在多个列上进行条件运算



我有一个包含8列的数据集"A1"A2〃;等等,每个值为0-4,包括NA。这些列对于不同的时间点重复;3A1";将是3个月;6A1";是6个月等等;状态";即:

  • 如果所有列都是NA->quot;不完整">
  • 如果8列中的任何一列包含NA->quot;部分完成">
  • 如果所有列=NA->quot;完全完成">

有人能帮助编写代码吗?

October_data_UK$"Status" <- ifelse(October_data_UK$`A1`!=0 & October_data_UK$`A2`!==0 & October_data_UK$`A3`!==0 & October_data_UK$`A4`!==0 & October_data_UK$`A5`!==0 & October_data_UK$`A6`!==0 & October_data_UK$`A7`!==0 & October_data_UK$`A8`!==0 & October_data_UK$`A9`!==0 & October_data_UK$`A10`!==0, 2,
ifelse(October_data_UK$`A1`==0 | October_data_UK$`A2`==0| October_data_UK$`A3`==0 | October_data_UK$`A4`==0 | October_data_UK$`A5`==0 | October_data_UK$`A6`==0 | October_data_UK$`A7`==0 | October_data_UK$`A8`==0 | October_data_UK$`A9`==0 | October_data_UK$`A10`==0, 1), 
ifelse(October_data_UK$`A1`==0 & October_data_UK$`A2`==0 & October_data_UK$`A3`==0 & October_data_UK$`A4`==0 & October_data_UK$`A5`==0 & October_data_UK$`A6`==0 & October_data_UK$`A7`==0 & October_data_UK$`A8`==0 & October_data_UK$`A9`==0 & October_data_UK$`A10`==0, 0, NA))

这里有一种使用基本R的方法:

library(dplyr)
df <- data.frame(id = 1:10,
A1 = sample(c(0:4, NA_real_), 10, T),
A2 = sample(c(0:4, NA_real_), 10, T),
A1.2 = sample(c(0:4, NA_real_), 10, T),
A2.2 = sample(c(0:4, NA_real_), 10, T))
df %>% rowwise() %>% mutate(status = case_when(
all(is.na(c_across(A1:A2.2))) ~ "incomplete",
any(is.na(c_across(A1:A2.2))) ~ "partial completion",
!any(is.na(c_across(A1:A2.2))) ~ "fully completed"
)
)
# A tibble: 10 × 6
# Rowwise: 
id    A1    A2  A1.2  A2.2 status            
<int> <dbl> <dbl> <dbl> <dbl> <chr>             
1     1     2    NA     0     0 partial completion
2     2    NA     0     4     2 partial completion
3     3     2     1     2     4 fully completed  

创建于2022-10-26由reprex包(v2.0.1(

在上面的例子中,CCD_2函数正在搜索一个以a(区分大小写(开头、后面有一个数字的字符串。因此,与该模式匹配的每个变量都将被包括在内。

PD_4如果数据集中没有其他变量,也可以使用mutate_all。

最新更新