我有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<-"
最终目标是将所有数据帧与rbind
或merge
合并
for (i in 1:length(temp2)) allDF = rbind(temp2[i])
答案 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)