如何从含列表列的R数据框生成单字符条件变量
嘿,这个需求挺典型的,我给你两种简单的实现方式,不管你习惯用基础R还是tidyverse工具都能搞定!
实现步骤
首先先还原你的初始数据(确保我们在同一个起点上):
df <- data.frame(names=1:6) df$V1<- list(c("NO"), c("NO","NO"), c("NO", "YES"), c("YES", "NO", "YES"), c("NO", "NO", "NO"), c("YES"))
方法1:基础R原生实现(无需额外包)
如果你不想加载任何扩展包,用sapply就能轻松解决——它会遍历V1列的每个列表元素,执行判断逻辑:
df$V2 <- sapply(df$V1, function(x) { # 检查当前列表元素里是否有"YES" if ("YES" %in% x) "YES" else "NO" })
方法2:tidyverse风格实现(更简洁)
如果你平时常用tidyverse生态,purrr包的map_chr函数会更贴合你的代码风格,它专门用来处理列表并返回字符向量:
library(purrr) df$V2 <- map_chr(df$V1, ~if("YES" %in% .x) "YES" else "NO")
最终结果
运行上面任意一种方法后,你就能得到预期的输出:
df #> names V1 V2 #> 1 1 NO NO #> 2 2 NO, NO NO #> 3 3 NO, YES YES #> 4 4 YES, NO, YES YES #> 5 5 NO, NO, NO NO #> 6 6 YES YES
核心逻辑其实很直白:我们逐个检查V1里的每个列表元素,只要其中包含至少一个"YES",就给V2赋值"YES";只有当所有元素都是"NO"的时候,V2才是"NO",完全匹配你的规则~
内容的提问来源于stack exchange,提问作者PauG
相关产品推荐
相关产品推荐

