多个if else语句

时间:2015-02-03 21:43:10

标签: r if-statement

我有以下df

      var1 var2  a1    a2
1    a    b      y     z
2    b    a      z     y
3    b    b      z     z

从以下代码

创建
help <- data.frame(var1 = c("a", "b", "b"), var2 = c("b", "a", "b"), a1 = c(y, z, z), a2 = c(z, y, z))

我打算创建一个ifelse语句,我能够(1)将所有a1值替换为&#39; bp&#39;当var1等于&#39; a&#39;和(2)将所有a2值替换为&#39; bp&#39;当var2等于&#39; a&#39;。如果var1或var2不是&#39; a&#39;我不想更改值。

ifelse命令不是解决此问题的最佳方法吗?我开始使用help$a1[help$a1 == "a"] <- "bp"手动完成每个操作,但是,由于我有多个变量和一个大型数据集,因此需要一些时间。任何援助都会很棒。

非常感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用标准子集。假设每个问题编辑a1a2属于“字符”类,那么

df
#  var1 var2 a1 a2
#1    a    b  y  z
#2    b    a  z  y
#3    b    d  z  z

df[,3:4][df[,1:2]=="a"]<-"bp"

df
#  var1 var2 a1 b2
#1    a    b bp  z
#2    b    a  z bp
#3    b    d  z  z

您也可以利用相同

的命名约定
sel<-paste0("var",1:2)
mut<-paste0("a",1:2)
df[,mut][df[,sel]=="a"]<-"bp"

在任何一种情况下,内部部分,例如df[,sel]=="a"返回一个与df[,sel]形状相同的逻辑矩阵(因此形状与df[,mut]相同),TRUE只有在存在“a”的地方df[,mut][...] 。外部部分,例如{{1}},使用该逻辑矩阵来指示受赋值的子集。