R语言中如何将与参考列x匹配的行赋值为1、不匹配赋值为0
问题原因分析
- 你的循环从第1列开始遍历,直接修改了作为参考基准的x列,导致后续所有对比的基准错误
- 赋值语句语法不符合R规则:
df[df$x == df[,i], df[ ,i]<- 1]同时做行筛选和列赋值,返回结果为空,所以所有单元格被覆盖为NA
解决方案
你有100列需要处理,优先推荐向量化运算,执行效率远高于循环,一行代码即可完成:
# 选取除x列外的所有列,逐行和x列对比,逻辑值TRUE/FALSE转整数直接得到1/0 df[, -1] <- as.integer(df$x == as.matrix(df[, -1]))
如果更习惯用循环写法,正确的写法如下:
# 从第2列开始遍历,跳过参考列x for(i in 2:ncol(df)){ df[, i] <- ifelse(df$x == df[, i], 1, 0) }
测试验证
用你给出的示例数据测试,构造数据的代码:
df <- data.frame( x = c("t", "a", "g"), y = c("c", "t", "g"), z = c("a", "a", "t") )
运行上述任意一种方案,都可以得到你预期的输出结果。
内容的提问来源于stack exchange,提问作者Rbion
相关产品推荐
相关产品推荐

