Я читал некоторые темы о функциях применения, но я все еще борюсь с приложением.Я хочу создать фиктивную переменную во фрейме данных, которая принимает значение 1, если комбинация двух значений переменной существует в наблюдении за другим фреймом данных.
Создание двух фреймов данных:
df1 <- data.frame(c("A","C","E","F"),
c(17,24,5,8))
names(df1)[1] <- "Apple"
names(df1)[2] <- "Orange"
df1$Apple <- as.character(df1$Apple)
df1$Banana <- 0
df2 <- data.frame(c("Q","A","C","E"),
c(8,303,24,17))
names(df2)[1] <- "Tomato"
names(df2)[2] <- "Cucumber"
df2$Tomato <- as.character(df2$Tomato)
Единственным наблюдением, существующим в обоих фреймах данных, является "C", 24, который находится в строке 2 df1 и строке 3 df2.Я могу извлечь эту информацию, используя цикл for, создавая подмножество с переменной эквивалентностью для первой переменной и проверяя, существует ли идентичное значение для 2-й переменной в наборе данных:
for(idx in 1:4){
df3 <- subset(df2, Tomato == df1$Apple[idx])
df1$Banana[idx] <- df1$Orange[idx] %in% df3$Cucumber
}
, что приводит кжелаемый результат:
> df1
Apple Orange Banana
1 A 17 0
2 C 24 1
3 E 5 0
4 F 8 0
Однако я не могу достичь того же результата с помощью функции применения:
Banana <- function(){
df3 <- subset(df2, Tomato == df1$Apple)
df1$Orange %in% df3$Cucumber
}
apply(X = df1, MARGIN = 1, FUN = Banana)
Вместо этого я получаю следующее сообщение об ошибке:
Ошибка в FUN (newX [, i], ...): неиспользованный аргумент (newX [, i])
Кто-нибудь знает, что я здесь не так делаюи как правильно использовать функцию?