У меня есть датафрейм и в определенном столбце есть некоторые пропущенные значения. Я хочу заменить их, сравнивая значения из другого столбца. Я должен сделать это несколько раз в общем коде с разными именами столбцов. Поэтому я хочу построить функцию, которая делает это:
df
# A B C
# 1 "USA" 1999
# 2 NA 1999
# 3 "GER" 1999
# 3 "GER" 1999
нет Я хочу заменить все значения в столбце B, которые равны в столбце A на 2, на «ABC». используя уровни здесь, потому что один столбец состоит из факторов (?)
levels(df$B) <- c(levels(df$B), "ABC")
df$B[df$A==2] <- "ABC"
так что это прекрасно работает. вывод - это именно то, что я хочу:
df
# A B C
# 1 "USA" 1999
# 2 "ABC" 1999
# 3 "GER" 1999
# 3 "GER" 1999
но я хочу поместить это в функцию, потому что в моем проекте разные наборы данных с разными именами и именами столбцов, а также с разными числами для преобразования в другие строки, чем "ABC". Итак, как передать имена набора данных и столбцов? это моя попытка:
fun1 <- <- function(dataset,col1,col2) {
levels(dataset$col1) <- c(levels(dataset$col1), "ABC")
dataset$col1[dataset$col2==2] <- "ABC"
return(dataset)
}
Но я всегда получаю это сообщение об ошибке:
Error in levels(dataset$col1) <- c(levels(dataset$col1), "ABC") :
attempt to set an attribute on NULL