如何在R语言中利用逻辑值合并两列数据生成VAT状态列?
解决方法
首先先构造你的示例数据(方便测试):
library(tidyverse) farmers_vat <- tibble( `VAT tax payer` = c("Yes", "No"), `Flat rate farmer` = c("No", "Yes") )
接下来用几种不同的方式实现需求:
方法1:用if_else(最简洁,适合只有两类的场景)
因为数据里每一行只会有一个"Yes",且只有两种类别,直接判断第一列是否为"Yes",是就返回对应类别,否则返回另一类:
farmers_vat_result <- farmers_vat %>% mutate(VAT_status = if_else(`VAT tax payer` == "Yes", "VAT tax payer", "Flat rate farmer")) %>% select(VAT_status) # 保留目标列,删除原有两列
方法2:用case_when(扩展性更强,后续加类别可直接追加条件)
如果以后可能新增其他VAT状态类别,用case_when会更灵活:
farmers_vat_result <- farmers_vat %>% mutate(VAT_status = case_when( `VAT tax payer` == "Yes" ~ "VAT tax payer", `Flat rate farmer` == "Yes" ~ "Flat rate farmer" # 后续加新类别直接在这里追加判断行即可 )) %>% select(VAT_status)
方法3:通用型写法(自动匹配"Yes"对应的列名)
如果列数较多或者不想硬编码类别名称,可以用rowwise+c_across动态获取每行"Yes"所在的列名:
farmers_vat_result <- farmers_vat %>% rowwise() %>% mutate(VAT_status = names(.)[which(c_across(everything()) == "Yes")]) %>% ungroup() %>% select(VAT_status)
运行任意一种方法后,farmers_vat_result就是你需要的结果:
| VAT_status |
|---|
| VAT tax payer |
| Flat rate farmer |
内容的提问来源于stack exchange,提问作者Pawek-13
相关产品推荐
相关产品推荐

