在不影响原始列条件语句的情况下有条件地替换值是基于
Conditionally replacing values without it affecting the original column conditional statement is based on
各位。我已经弄清楚如何根据满足数据框中另一列中的某些条件来替换 R 中的值。但是,我编写的代码似乎将条件语句应用于我基于条件的原始列。基本上,我希望在数据框中的所有列中替换值 除了 用于制作 rule/condition 的列。
这是示例数据 (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 中的值不变。关于如何实现这一目标的任何建议?
谢谢!
试试这个:创建 C6 列的副本并将其命名为 dupC6。然后 运行 你的代码使所有内容都为 0。接下来将 dupC6 的值与 C6 交换。不过我相信还有更好的方法。
dupC6<-df$C6
df[df$C6 == "Y",] = 0
df$C6<-dupC6
对列选择使用负索引:
df[df$C6 == "Y", -match("C6",names(df))] <- 0
# C1 C2 C3 C4 C5 C6 C7 C8
#1 0 0 0 0 0 Y 0 0
#2 0 0 0 0 0 0 0 Y
#3 0 0 0 0 0 0 0 Y
#4 0 0 0 0 0 0 0 Y
#5 0 0 Y 0 0 0 0 Y
#6 0 0 0 0 0 0 0 Y
#7 0 0 0 0 0 0 0 Y
#8 0 0 0 0 0 Y 0 0
# ....
各位。我已经弄清楚如何根据满足数据框中另一列中的某些条件来替换 R 中的值。但是,我编写的代码似乎将条件语句应用于我基于条件的原始列。基本上,我希望在数据框中的所有列中替换值 除了 用于制作 rule/condition 的列。
这是示例数据 (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 中的值不变。关于如何实现这一目标的任何建议?
谢谢!
试试这个:创建 C6 列的副本并将其命名为 dupC6。然后 运行 你的代码使所有内容都为 0。接下来将 dupC6 的值与 C6 交换。不过我相信还有更好的方法。
dupC6<-df$C6
df[df$C6 == "Y",] = 0
df$C6<-dupC6
对列选择使用负索引:
df[df$C6 == "Y", -match("C6",names(df))] <- 0
# C1 C2 C3 C4 C5 C6 C7 C8
#1 0 0 0 0 0 Y 0 0
#2 0 0 0 0 0 0 0 Y
#3 0 0 0 0 0 0 0 Y
#4 0 0 0 0 0 0 0 Y
#5 0 0 Y 0 0 0 0 Y
#6 0 0 0 0 0 0 0 Y
#7 0 0 0 0 0 0 0 Y
#8 0 0 0 0 0 Y 0 0
# ....