如何根据列名及关联表替换布尔TRUE值并生成行状态标识
解法说明
以下是基于R语言tidyverse套件的实现方案,逻辑清晰易读:
1. 构造测试数据
如果已经有实际数据可以跳过这一步:
library(tidyverse) # 原始数据表df1 df1 <- data.frame( id = 1:4, v1 = c(TRUE, FALSE, TRUE, FALSE), v2 = c(TRUE, FALSE, FALSE, TRUE), v3 = c(FALSE, TRUE, FALSE, TRUE), v4 = c(FALSE, FALSE, FALSE, TRUE) ) # 权重映射表df2 df2 <- data.frame( var = c("v1", "v2", "v3", "v4"), weight = c(1, 4, 2, 5) )
2. 数据处理代码
df.out <- df1 %>% # 遍历v1到v4列,TRUE替换为对应权重,FALSE替换为0 mutate(across(v1:v4, ~ ifelse(.x, df2$weight[df2$var == cur_column()], 0))) %>% # 按行统计非零值数量,生成Status标识 rowwise() %>% mutate( Status = case_when( sum(c_across(v1:v4) != 0) == 1 ~ "Single", TRUE ~ "Multiple" ) ) %>% ungroup()
运行上述代码后输出的df.out和你给出的期望结果完全一致。
内容的提问来源于stack exchange,提问作者Andres Mora
相关产品推荐
相关产品推荐

