我需要在数据框中添加一列,并根据现有列的某些条件填充新添加的列的值
示例数据框:
DeptID Name Age Active
2 Aira 23 0
2 Ben 25 1
2 Cat 32 1
3 Dan 28 1
所需输出:如果DeptID = 2则(如果Active = 1则Rate = 0 else Rate = 1)否则Rate为空
DeptID Name Age Active Rate
2 Aira 23 0 0
2 Ben 25 1 1
2 Cat 32 1 1
3 Dan 28 1
我试过下面的代码,但总是0,请帮忙。
data = cbind(data, Rate=sapply(data$DeptID, function(x) {
ifelse(as.character(x) %in% c(2), ifelse(as.character(data$Active) %in% c(1),1,0),0)
}))
答案 0 :(得分:4)
您使用ifelse
走在正确的轨道上,但是您可以在不分割DeptID
的情况下执行此操作:
dat <- transform(dat, Rate = ifelse(DeptID == 2, ifelse(Active == 1, 0, 1), ""))
dat
> dat
DeptID Name Age Active Rate
1 2 Aira 23 0 1
2 2 Ben 25 1 0
3 2 Cat 32 1 0
4 3 Dan 28 1
你也可以通过索引来替换数据框中的元素(从dat
再次开始原始数据开始)
dat$Rate <- "" ## add in one of the options as a default value for column
dat$Rate[dat$DeptID == 2 & dat$Active == 1] <- 0
dat$Rate[dat$DeptID == 2 & dat$Active == 0] <- 1
> dat
DeptID Name Age Active Rate
1 2 Aira 23 0 1
2 2 Ben 25 1 0
3 2 Cat 32 1 0
4 3 Dan 28 1