Вы должны использовать ifelse
здесь, который уже векторизован.Но есть потенциально более чистый способ выразить свою логику, используя case_when
из пакета dplyr
:
library(dplyr)
data$newcolumn <- case_when(
data$Male_exposure == "High" && data$Quality == "HighQ" ~ 1,
data$Male_exposure == "High" && data$Quality == "LowQ" ~ 2,
data$Male_exposure == "Low" && data$Quality == "HighQ" ~ 3,
data$Male_exposure == "Low" && data$Quality == "LowQ" ~ 4
TRUE ~ 5
)
Если вы действительно хотите продолжить свой циклический подход, то вам действительно нужно сделатьиспользование счетчика цикла внутри кода цикла:
data$newcolumn <- for (i in 1:nrow(data)) {
if (data[i, "Male_exposure"] == "High" && data[i, "Quality"] == "HighQ") {
print(1)
}
if (data[i, "Male_exposure"] == "High" && data[i, "Quality"] == "LowQ") {
print(2)
}
if (data[i, "Male_exposure"] == "Low" && data[i, "Quality"] == "HighQ") {
print(3)
}
if (data[i, "Male_exposure"] == "Low" && data[i, "Quality"] == "LowQ") {
print(4)
}
}