如何创建一个函数,根据R中不同数据帧中的值生成新变量

如何创建一个函数,根据R中不同数据帧中的值生成新变量,r,database,dataframe,R,Database,Dataframe,我想创建这样的函数(显然不是正确的代码): 在纯文本中,我有一个个人列表和一个数据库,其中包含关于这些人的混合信息 个人。比如说,DATAFRAME2包含阅读c(id、标题、作者、日期)的书籍信息。我想在DATAFRAME1中创建一个新变量,布尔值为,如果个人读过一本特定的书(VARIABLE1),以及他们第一次读它的日期(VARIABLE2)。另外,添加第三个具有读取次数的变量也很有趣,但不是必需的 我以前在R中没有真正做过这件事,主要是做基本的统计和与dplyr的基本争论。我想我可以使用dp

我想创建这样的函数(显然不是正确的代码):

在纯文本中,我有一个个人列表和一个数据库,其中包含关于这些人的混合信息 个人。比如说,
DATAFRAME2
包含阅读
c(id、标题、作者、日期)
的书籍信息。我想在
DATAFRAME1
中创建一个新变量,布尔值为,如果个人读过一本特定的书(
VARIABLE1
),以及他们第一次读它的日期(
VARIABLE2
)。另外,添加第三个具有读取次数的变量也很有趣,但不是必需的


我以前在R中没有真正做过这件事,主要是做基本的统计和与dplyr的基本争论。我想我可以使用dplyr加入,但这感觉是一个更好的方法。如果您能为我提供任何帮助,我将不胜感激。

以下函数满足问题的要求。它的论点是

  • DF1
    DF2
    具有明显的意义
  • var1
    var2
    是问题中的
    VARIABLE1
    VARIABLE2
  • value
    某物的值
  • 测试数据在末尾

    fun <- function(DF1, DF2, ID = 'ID', var1, var2, value){
      DF1[[var1]] <- NA
      DF1[[var2]] <- NA
      k <- DF2[[var1]] == value
      for(id in df1[[ID]]){
        i <- DF1[[ID]] == id
        j <- DF2[[ID]] == id
        if(any(j & k)){
          DF1[[var1]][i] <- TRUE
          DF1[[var2]][i] <- DF2[[var2]][j & k]
        }
      }
      DF1
    }
    
    
    
    fun(df1, df2, value = 4, var1 = 'X', var2 = 'Y')
    #  ID    X  Y
    #1  a   NA NA
    #2  d TRUE 19
    

    fun请发布可复制的示例和预期输出。
    
    fun <- function(DF1, DF2, ID = 'ID', var1, var2, value){
      DF1[[var1]] <- NA
      DF1[[var2]] <- NA
      k <- DF2[[var1]] == value
      for(id in df1[[ID]]){
        i <- DF1[[ID]] == id
        j <- DF2[[ID]] == id
        if(any(j & k)){
          DF1[[var1]][i] <- TRUE
          DF1[[var2]][i] <- DF2[[var2]][j & k]
        }
      }
      DF1
    }
    
    
    
    fun(df1, df2, value = 4, var1 = 'X', var2 = 'Y')
    #  ID    X  Y
    #1  a   NA NA
    #2  d TRUE 19
    
    set.seed(1234)
    
    df1 <- data.frame(ID = c("a", "d"))
    df2 <- data.frame(ID = rep(letters[1:5], 4), 
                      X = sample(20, 20, TRUE),
                      Y = sample(20))