如何一次处理多个data.frame中的行和填充列?

时间:2019-10-08 10:00:12

标签: r dataframe

我有10多个data.frames具有相同的列。第一列用“!”填充我想将其更改为data.frame名称。每个数据帧有7000多行。每个data.frame中的最后一行为空,我要删除。我的目标是合并data.frames,但将数据的来源保留在第一列中。

我在temp2中有一个数据框名称列表,这些名称也是我要放入给定数据框第一列的名称。

    > str(temp2)
     chr [1:13] "bone_marrow" "colon" "duodenum" "esophagus" "liver" "lymph_node" "rectum" ...

要在data.frame名称中填写的第一列,名称为“ Tissue” df$Tissue

我尝试使用以下方法删除每个数据框中的最后一行:

    for (i in 1:length(temp2)) assign(temp2[i], temp2[i][-nrow(temp2[i],)])

,并用数据框名称填充第一列:

    for (i in 1:length(temp2)) paste0(temp2[i], "$Tissue = ", temp2[i])

    for (i in 1:length(temp2)) paste0(temp2[i], "$Tissue") <- temp2[i]

第一个代码(用于删除最后一行)返回:

Error in nrow(temp2[i], ) : unused argument (alist())

第二个代码是无声的,但是什么也不做, 最后一个返回:

Error in paste0(temp2[i], "$Tissue") <- temp2[i] : 
could not find function "paste0<-"

最终目标是将所有数据帧与rbindmerge合并

    for (i in 1:length(temp2)) allDF = rbind(temp2[i])

1 个答案:

答案 0 :(得分:0)

假设您的数据帧是df1,df2,df3。

首先,您可以将它们合并为一个列表:

dflist <- list(df1, df2, df3)

然后,您可以为它们中的每一个创建新列,并剥离每个数据帧的最后一行(参数为-1的head()函数删除最后一行):

dflist2 <- lapply(1:NROW(dflist), 
    function(i) {dflist[[i]]$Tissue <- temp2[i]; 
                 head(dflist[[i]], -1)}
    )

最后,您可以将它们绑定到一个大数据框中:

mydf <- do.call(rbind, dflist2)