R-在数据帧上插入

R-在数据帧上插入,r,R,我在R工作。我有4个数据帧,其中的数据我试图汇总成一个新的数据帧。基本上,4个起始帧的行名都是唯一标识符(其余帧都有关于标识符的数据)。可能存在重叠,即ID可能出现在四个表中的多个表中 我正在尝试使用以下格式构建数据帧: ID-DATASET1-DATASET2-DATASET3-DATASET4 "1"-FALSE-FALSE-TRUE-TRUE 基本上这表示ID1出现在数据集3和4中。因此,我们的目标是为每个ID提供一个布尔向量,它告诉我们在哪些数据集中找到了它。我有四个数据集作为数据帧,

我在R工作。我有4个数据帧,其中的数据我试图汇总成一个新的数据帧。基本上,4个起始帧的行名都是唯一标识符(其余帧都有关于标识符的数据)。可能存在重叠,即ID可能出现在四个表中的多个表中

我正在尝试使用以下格式构建数据帧:

ID-DATASET1-DATASET2-DATASET3-DATASET4
"1"-FALSE-FALSE-TRUE-TRUE
基本上这表示ID1出现在数据集3和4中。因此,我们的目标是为每个ID提供一个布尔向量,它告诉我们在哪些数据集中找到了它。我有四个数据集作为数据帧,行名是ID。由于我将以迭代方式构建最终的数据帧(称之为vectorTable),因此我将其初始化为空数据帧。我已开始编写一个函数,该函数将执行以下操作:

  • 检查向量表中是否有ID
    • 如果是,请更新正确的布尔值
  • 否则,构建一个新的布尔向量并添加它
  • 以下是该函数的代码:

    mapIdToVector <- function(id, vectorTable, dataIdx) {
    
        if(id %in% vectorTable$id) {
            vectorTable[test$id == id][dataIdx] = TRUE
        } else {
    
            # create a vector for the row
            row <- c(id, FALSE, FALSE, FALSE, FALSE)
            row[idx] = TRUE
    
            rbind(vectorTable, row)
        }
    }
    

    mapIdToVector以下是我的方法

    由于您没有提供数据,以下是一些:

    a <- data.frame(ID = letters[1:3])
    b <- data.frame(ID = letters[3:6])
    d <- data.frame(ID = letters[6:9])
    e <- data.frame(ID = letters[9:12])
    
    a <- data.frame(ID = letters[1:3])
    b <- data.frame(ID = letters[3:6])
    d <- data.frame(ID = letters[6:9])
    e <- data.frame(ID = letters[9:12])
    
    datlist <- list(a,b,d,e)
    allids <- unique(unlist(sapply(datlist, function(x) as.character(x[["ID"]]))))
    
    t(sapply(allids, function(x) sapply(datlist, function(y) x %in% y[["ID"]])))
    
       [,1]  [,2]  [,3]  [,4]
    a  TRUE FALSE FALSE FALSE
    b  TRUE FALSE FALSE FALSE
    c  TRUE  TRUE FALSE FALSE
    d FALSE  TRUE FALSE FALSE
    e FALSE  TRUE FALSE FALSE
    f FALSE  TRUE  TRUE FALSE
    g FALSE FALSE  TRUE FALSE
    h FALSE FALSE  TRUE FALSE
    i FALSE FALSE  TRUE  TRUE
    j FALSE FALSE FALSE  TRUE
    k FALSE FALSE FALSE  TRUE
    l FALSE FALSE FALSE  TRUE