Допустим, у меня есть три набора данных:Использование lapply для создания новых переменных через наборы данных, обусловливающие не существует
df1 <- data.frame(var1 = c(1,2,3), var2 = c(1,2,3))
df2 <- data.frame(var1 = c(1,2,3), var2 = c(1,2,3))
df3 <- data.frame(var1 = c(1,2,3), var2 = c(1,2,3), var3 = c(1,2,3))
Я хотел бы проверить, является ли переменная «var3» существует в каждом наборе данных. Если это не так, я хотел бы создать пустую переменную, называемую «var3». Вот что я пытаюсь:
dframes <- list(df1,df2,df3)
lapply(dframes, function(df) {
ifelse("var3" %in% colnames(df), print("var3 exists"), df$var3 <- NA)
})
Выход выходит как:
[[1]]
[1] NA
[[2]]
[1] NA
[[3]]
[1] "var3 exists"
И желательно «var3» переменная не генерируется в течение первых двух наборов данных - они по-прежнему содержат только " var1 "и" var2 ".
Вам нужна помощь.
Добавить 'возвратный (DF)' в ваша функция –
Вам не нужно 'return', просто' df' будет достаточно. Кроме того, ваша функция 'print' не будет слишком информативной, если вы хотите где-то сохранить эти результаты, поскольку' lapply' не обновляет ваши наборы данных, а печатает желаемые результаты. –
Большое спасибо @DavidArenburg и @MaratTalipov. Если бы я хотел, чтобы результаты обновили набор данных, как бы я это сделал? Я пробовал 'df <- as.data.frame (df)', но сохраненные наборы данных остались прежними. – muadhib