首页 > 解决方案 > 如何在 R 中合并数据框中的行?

问题描述

我有一个非常大的数据框(7 个变量的 121920 ob​​s)。所有变量都是因子。数据框看起来像这样(每个变量有更多的行和不同的级别):

元数据:

         SITE        SOIL        TIME                      HOST TISSUE TEMP             MEDIA
MSHM1                  Sorkhe Gypsum Soil 2016-Winter          Acantholimon sp.   Leaf   23               PDA
MSHM2                  Sorkhe Gypsum Soil 2016-Winter          Acantholimon sp.   Leaf   23               PDA
MSHM3                  Sorkhe Gypsum Soil 2016-Winter          Acantholimon sp.   Leaf   23               PDA
MSHM4                  Sorkhe Gypsum Soil 2016-Winter          Acantholimon sp.   Leaf   23               PDA
MSHM5                  Sorkhe Gypsum Soil 2016-Winter          Acantholimon sp.   Leaf   23               PDA
MSHM6                  Sorkhe Gypsum Soil 2016-Winter          Acantholimon sp.   Leaf   23               PDA
MSHM7                  Sorkhe Gypsum Soil 2016-Winter          Acantholimon sp.   Leaf   23               PDA
MSHM8                  Sorkhe Gypsum Soil 2016-Winter          Acantholimon sp.   Leaf   23               PDA

我想在新数据框中将每 4 行合并为 1 行。像这样的东西:

MSHM1                  Sorkhe Gypsum Soil 2016-Winter          Acantholimon sp.   Leaf   23               PDA
MSHM4                  Sorkhe Gypsum Soil 2016-Winter          Acantholimon sp.   Leaf   23               PDA
MSHM8                  Sorkhe Gypsum Soil 2016-Winter          Acantholimon sp.   Leaf   23               PDA
MSHM12                  Sorkhe Gypsum Soil 2016-Winter          Acantholimon sp.   Leaf   23               PDA

或者只保留每 4 行中的 1 行,因为它们具有相同级别的每个变量。

我试过了 :

S1<-seq(1,121920,4)
S2<-seq(4,121920,4)
D<-matrix(0,length(S1),7)
for (i in 1:length(S1)) {
  D[i,1]<-noquote(paste(metaDATA[S1[i]:S2[i],1]))
  D[i,2]<-noquote(paste(metaDATA[S1[i]:S2[i],2]))
  D[i,3]<-noquote(paste(metaDATA[S1[i]:S2[i],3]))
  D[i,4]<-noquote(paste(metaDATA[S1[i]:S2[i],4]))
  D[i,5]<-noquote(paste(metaDATA[S1[i]:S2[i],5]))
  D[i,6]<-noquote(paste(metaDATA[S1[i]:S2[i],6]))
  D[i,7]<-noquote(paste(metaDATA[S1[i]:S2[i],7]))
  }

但这不起作用,我收到了这个错误:

Error in D[i, 6] <- noquote(paste(metaDATA[S1[i]:S2[i], 6])) : 
  number of items to replace is not a multiple of replacement length

标签: rstringdataframemerge

解决方案


假设您的日期已命名df,请尝试

newdf <- df[ c(TRUE, rep(FALSE,3) ), ]

保留第一行,跳过 3,保留第五行,跳过 3,等等......


推荐阅读