我需要向数据框中添加一列,并根据现有列的某些条件来填充新添加列的值
示例数据框:
DeptID Name Age Active
2 Aira 23 0
2 Ben 25 1
2 Cat 32 1
3 Dan 28 1
Run Code Online (Sandbox Code Playgroud)
期望输出:如果 DeptID = 2 那么(如果 Active = 1 那么 Rate = 0 else Rate = 1) else 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
Run Code Online (Sandbox Code Playgroud)
我尝试了下面的代码,但总是得到 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)
}))
Run Code Online (Sandbox Code Playgroud)
你在正确的轨道上,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
Run Code Online (Sandbox Code Playgroud)
您还可以通过索引来替换数据框中的元素(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
Run Code Online (Sandbox Code Playgroud)