【发布时间】:2016-02-17 23:00:30
【问题描述】:
每个人。我已经弄清楚如何根据满足数据框中另一列中的某些条件来替换 R 中的值。但是,我编写的代码似乎将条件语句应用于我基于条件的原始列。基本上,我希望在数据框 except 的所有列中替换我用来制定规则/条件的列的值。
这里是样本数据(df):
C1 C2 C3 C4 C5 C6 C7 C8
0 0 0 0 0 Y 0 0
0 0 0 0 0 0 0 Y
0 0 0 0 0 0 0 Y
0 0 0 0 0 0 0 Y
0 0 Y 0 0 0 0 Y
0 0 0 0 0 0 0 Y
0 0 0 0 0 0 0 Y
Y Y Y Y Y Y Y Y
0 0 0 0 0 0 0 Y
0 0 0 0 0 0 0 Y
0 0 Y 0 0 Y 0 Y
0 0 Y 0 0 0 0 Y
0 0 0 0 0 0 0 Y
0 0 0 0 0 Y 0 0
0 0 0 0 0 0 0 Y
0 0 0 0 0 0 Y 0
我希望每一行都满足以下条件:如果 C6 列中的值为“Y”,我希望将其余列中的值转换为 0。
df[df$C6 == "Y",] = 0 # Most common code I found on SO to accomplish this
当我执行上面的代码行时,它也会将此规则应用于 C6 列(将 C6 中的“Y”更改为 0)。我不想要这个——我想在 C6 中保留值,就像在其他列中进行替换时一样。关于如何做到这一点的任何建议?
谢谢!
【问题讨论】:
-
您拥有的代码将结果应用于所有列。使用
df[df$C6 == "Y",-which(names(df) == "C6")] = 0 -
谢谢你,@Alex!听起来您和 thelatemail(如下)得出了相同的结论(尽管您使用 -which() 而 thelatemail 使用 -match())。非常感谢!
标签: r conditional