Как я могу изменить значение одной ячейки, обусловленной другими значениями другой? - PullRequest
0 голосов
/ 17 сентября 2018

Я создал новый столбец под названием «Производительность», и мне нужно изменить значения каждой ячейки в зависимости от значения другого столбца.

Сначала я создал столбец, подобный этому

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 различных идентификаторов, с 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 является фактором. Помимо «хорошо», мне нужны и другие значения для других идентификаторов.

Спасибо!

1 Ответ

0 голосов
/ 18 сентября 2018

Вы 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...