如何将一个单元格的值更改为另一个单元格的不同值?

时间:2018-09-17 20:14:06

标签: r loops

我创建了一个名为Performance的新列,我需要将每个单元格的值更改为另一列的值。

首先,我创建了这样的列

biperf$performance <- 0

因此数据框如下所示:

ID   performance
1        0
1        0
1        0
1        0
2        0
2        0
2        0 
2        0  
3        0
3        0
3        0
3        0
15       0
15       0
15       0
15       0 
16       0
16       0
16       0
16       0

我希望它看起来像这样:

ID   performance
1        good
1        good
1        good
1        good
2        0
2        0
2        0 
2        0  
3        0
3        0
3        0
3        0
15       good
15       good
15       good
15       good 
16       good
16       good
16       good
16       good 

然后我尝试了一下,它确实起作用了,但是我有200个不同的ID,每个ID有20个观察值,而不是我在此处作为示例的4个观察值。

biperf$performance[biperf$ID == "1"] <- "good"
biperf$performance[biperf$ID == "15"] <- "good"
biperf$performance[biperf$ID == "16"] <- "good"

所以我尝试了以下方法:

perf$performance <- ifelse(perf$ID %in% c('1', '15','16'), "good", perf$performance)

这改变了性能下的所有单元。所以我尝试了一个循环,但它给了我一个错误,我无法使其正常工作。

if(biperf$ID %in% c('1','15','16')){
  biperf$performance = "good"
}

我在论坛中寻找了此内容,但是在条件单元格中找不到包含很多值的任何内容。 ID是一个因素。除了“好”,我还需要其他ID的其他值。

谢谢!

1 个答案:

答案 0 :(得分:0)

ifelse是个好方法,您只需要保持数字和字符值的直线:

# create example dataframe
biperf <- data.frame(ID = rep(c(1,2,3,15,16), each=4))

# do your ifelse (notice no quotes around 1/15/16, yes quotes around "0" and "good"
beperf$performance <- ifelse(biperf$ID %in% c(1, 15, 16), "good", "0")