是否可以使用ifelse
获得多个输出?
我想创建一个带有0或1的变量ExpectedVariable
。
如果VariableA
的值为0,那么我需要ExpectedVariable
为当前行和前一行的0。如果VariableA
的值为1,那么我需要ExpectedVariable
为1。
我在考虑这样的事情(因为它不起作用):
mydata$ExpectedVariable <- ifelse(mydata$VariableA == 0, (mydata$ExpectedVariable & lag(mydata$ExpectedVariable) <- 0), 1)
示例:
VariableA ExpectedVariable
row1 1 1
row2 1 1
row3 1 1
row4 1 1
row5 1 1
row6 1 0
row7 0 0
row8 1 1
row9 1 0
row10 0 0
row11 1 1
row12 1 1
row13 1 0
row14 0 0
答案 0 :(得分:1)
您可以考虑问题的另一种方法是ExpectedVariable
如果满足两个条件中的任何一个(VariableA
的当前值为零)或引导,则等于零VariableA
为零)。换句话说,不要考虑多个输出,而应考虑多个条件,ifelse()
可以轻松完成。然后我们可以通过任何类型的移位功能来实现这一点。
使用data.table::shift()
:
expected_df <- read.table(header = TRUE, text = "
VariableA ExpectedVariable
row1 1 1
row2 1 1
row3 1 1
row4 1 1
row5 1 1
row6 1 0
row7 0 0
row8 1 1
row9 1 0
row10 0 0
row11 1 1
row12 1 1
row13 1 0
row14 0 0")
rownames(expected_df) <- NULL
mydata <- data.frame(VariableA = expected_df$VariableA)
mydata$ExpectedVariable <- ifelse(mydata$VariableA == 0
| data.table::shift(mydata$VariableA,
type = 'lead') == 0,
0, 1)
all.equal(mydata, expected_df)
[1] TRUE
使用dplyr::lead()
mydata$ExpectedVariable <- ifelse(mydata$VariableA == 0
| dplyr::lead(mydata$VariableA) == 0,
0, 1)
all.equal(mydata, expected_df)
[1] TRUE
答案 1 :(得分:0)
应该做的诀窍:
df$expectedVariable[df$VariableA == 1] <- 1
df$expectedVariable[df$VariableA == 0] <- 0
df$expectedVariable[which(df$VariableA == 0) - 1] <- 0
或者将最后两行放在一个:
df$expectedVariable[c(which(df$VariableA == 0), which(df$VariableA == 0) - 1)] <- 0