在R语言中将指定多列转换为二进制变量时遇错误求解决
解决R中数据框指定列转换为二进制变量的错误问题
首先得说,你遇到的报错是因为数据框的索引语法用错了:R里数据框的[操作符格式是df[行索引, 列索引],你把多个列范围用逗号分开,相当于给[.data.frame传了一堆多余的参数,自然会报unused arguments错误。
正确的做法是把所有需要转换的列范围合并成一个单一的列索引向量,然后再进行操作。这里给你两种可选的实现方式,根据你的需求来选:
方式1:只保留转换后的目标列
如果只需要得到包含这些二进制列的新数据框,可以这么写:
# 先把所有目标列的索引合并成一个向量 target_columns <- c(8:37, 46:55, 62:72, 97:119, 121:133, 146:149, 155:171, 200:256, 258:307) # 转换为二进制(1/0) binarydata1 <- (!is.na(freqdata1[target_columns])) + 0
方式2:保留原数据框的所有列,仅替换目标列为二进制
如果想保留原数据框的其他列,只把指定列转成二进制,就用下面的代码:
target_columns <- c(8:37, 46:55, 62:72, 97:119, 121:133, 146:149, 155:171, 200:256, 258:307) # 先复制原数据框 binarydata1 <- freqdata1 # 替换目标列 binarydata1[target_columns] <- (!is.na(freqdata1[target_columns])) + 0
补充说明
(!is.na(x)) + 0是R里把逻辑值(TRUE/FALSE)转换成数值型1/0的经典技巧:!is.na(x)会把非NA值转为TRUE,NA转为FALSE,加0后TRUE变成1,FALSE变成0,完全符合你的需求。- 提前把列索引存在
target_columns变量里,不仅避免了语法错误,还让代码更易读、方便后续修改。
内容的提问来源于stack exchange,提问作者Pre
相关产品推荐
相关产品推荐

