用apply函数替换for循环

用apply函数替换for循环,r,R,我读过一些关于应用函数的文章,但我仍然在为应用程序而挣扎。我想在一个数据帧中生成一个虚拟变量,如果在另一个数据帧的观察中存在两个变量值的组合,则该变量的值为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(df

我读过一些关于应用函数的文章,但我仍然在为应用程序而挣扎。我想在一个数据帧中生成一个虚拟变量,如果在另一个数据帧的观察中存在两个变量值的组合,则该变量的值为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)
但是,我无法使用apply函数获得相同的结果:

Banana <- function(){
  df3 <- subset(df2, Tomato == df1$Apple)
  df1$Orange %in% df3$Cucumber
}

apply(X = df1, MARGIN = 1, FUN = Banana)

Banana使用
apply
的一种方法是逐行迭代
df1
并检查任何一行的第一个值是否等于
Tomato
,第二个值是否等于
Cucumber
,并相应地分配整数值

df1$Banana <- as.integer(apply(df1, 1, function(x) 
                 any(x[1] == df2$Tomato & x[2] == df2$Cucumber)))
df1
#  Apple Orange Banana
#1     A     17      0
#2     C     24      1
#3     E      5      0
#4     F      8      0

df1$Banana作为旁注,您可以在一行中构建data.frame,如下所示:
df1
Banana <- function(){
  df3 <- subset(df2, Tomato == df1$Apple)
  df1$Orange %in% df3$Cucumber
}

apply(X = df1, MARGIN = 1, FUN = Banana)
df1$Banana <- as.integer(apply(df1, 1, function(x) 
                 any(x[1] == df2$Tomato & x[2] == df2$Cucumber)))
df1
#  Apple Orange Banana
#1     A     17      0
#2     C     24      1
#3     E      5      0
#4     F      8      0