Я хочу:
- сгруппировать по фактору (Site, Pos);
- если фактор 'Pos' == "A", присвоить выбранное значение ("a") тем же строкам в новом столбце ("Treat1");
- если фактор 'Pos' == "B", присвоить выбранное значение ("b") тем же строкам в новом столбце ("Treat1");
- если фактор «Pos» == «AT», присвойте одно значение («a») каждой первой строке нового столбца («Treat 1»), где «Pos» == A, и второе значение («b») каждому второй ряд такой же.
Пока я знаю только, как закодировать первые 3 точки, но этот цикл все еще не работает так, как я ожидал. Он заполняет только последнюю строку в новом столбце Treat1. Любые идеи?
Я очень открыт для различных подходов к этому, но, пожалуйста, имейте в виду, что я новичок в R.
Репро:
yow <- c(1:6)
Pos <- c("A", "B", "A", "AT", "AT", "B")
df <- as.data.frame(Pos, yow)
df$Site <- c("low", "low", "high", "high", "high", "high")
df$Treat1 <- NA
for (i in nrow(df %>% group_by(Site)){
if(df$Pos[i] == "A"){
df$Treat1[i] <- "a"
}
else {
if(df$Pos[i] == "B"){
df$Treat1[i] <- "b"
}
}
}
Я ожидаю / ищу:
- Позиция сайта Treat1
- низкий А а
- низкий си б
- высокая А а
- высокий уровень АТ
- высокий АТ б
- высокая си б
Этот ответ классный, и он выполняет первые 3 шага, в которых мой цикл ifelse терпит неудачу, но он не говорит о 4-й проблеме! R Создать новый столбец значений на основе уровней фактора другого столбца