R中data.table匹配列名字符串并新增存在标记行的实现方法
解决方案
你之前代码报错是因为df$present <- ...是新增列的语法,要求右侧向量长度和数据集行数一致,而你传入的是和列数等长的向量,自然出现长度不匹配的报错,和是否用ifelse无关。
针对data.table的场景可以直接按列名匹配拼接新行实现需求,代码如下:
library(data.table) # 你的目标ID列表 a <- c("ID42", "ID4") # 构造新行并拼接到原数据集,dt为你的data.table对象名 dt <- rbind(dt, c(list("present"), as.list(+ (colnames(dt)[-1] %in% a))))
代码说明
- 代码中的
+ 逻辑值是R中快速将TRUE/FALSE转为1/0的简洁写法,执行效率远高于ifelse,完全不需要额外调用ifelse - 整段逻辑为向量化运算,即使你的数据集有8万列也能快速执行,没有性能瓶颈
rbind会自动按列名匹配拼接,不需要担心列顺序错位的问题
内容的提问来源于stack exchange,提问作者tacrolimus
相关产品推荐
相关产品推荐

