将第N行的NAs插入到data.frames列表中,从列表中插入N行。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将第N行的NAs插入到data.frames列表中,从列表中插入N行。相关的知识,希望对你有一定的参考价值。

经过无数个小时,我发现自己无法解决以下问题。

我有一个数据框列表。我想在每个DF中分别插入(而不是替换)一行或多行NA(总是至少一行)。要插入的NA的数量被存储在一个单独的列表中。

为了说明这一点,我有以下两个列表。

#list of dataframes
listDF <- list(data.frame(1:10),data.frame(1:9))
#list of row-indexes
listRI<- list(1,c(3,5))

因此,我的任务是,将一行NA插入到第一个数据帧的第一行。listDF 和两行NA(第3行和第5行)到第二个数据帧上。listDF

来自 在数据框中添加新的行,在特定的行索引处,而不是追加?,答案156,我做了以下函数。

  insertRow <- function(df, rowindex) {
  df[seq(rowindex+1,nrow(df)+1),] <- df[seq(rowindex,nrow(df)),]
  df[rowindex,] <- rep(NA,ncol(df))
  df
}

在这之后,我不知道该如何继续。看了看SO和其他页面,我想Map-function也许能帮到我。下面只要是每一个df只增加一行就可以了。例如,这个函数就很好用。

#Example with insert of single row in both dataframes
Map(function(x,y){insertRow(x,y)},x=listDF,y=list(1,5))

在第一个数据集的第一行插入一行NA 在第二个数据集的第五行插入一行NA。但是如果我使用:

 #Example with insert of single row in both dataframes
    Map(function(x,y){insertRow(x,y)},x=listDF,y=listRI)

函数就不工作了(因为第二个列表中的 listRI 如果我的理解正确的话,我所错过的是一个for-loop,更新这些listsdfs的长度为1。listDF 其中我想插入几行NA。我可以得到一些意见,如何解决我的问题?

如果我需要说得更清楚,请告诉我。最好的约翰

编辑:我编辑了示例代码,不仅包括行索引的首数。

编辑(再次):为了防止有人碰到这段代码并打算使用,我发现了一个关于 insertRow 函数,如果打算在数据框中添加一条新行。我通过编辑函数解决了这个问题,具体如下。

insertRow <- function(df, rowindex) {
if(rowindex<=nrow(df)){df[seq(rowindex+1,nrow(df)+1),] <- df[seq(rowindex,nrow(df)),]
  df[rowindex,] <- rep(NA,ncol(df))
  return(df)}
if(rowindex>=nrow(df)+1){df[nrow(df)+1,]<-rep(NA,ncol(df))
return(df)}
}
答案

你可以添加一个 for 循环往复 列表RI.

Map(function(x,y){for(i in y) {x <- insertRow(x, i)}; x},x=listDF,y=listRI)
#[[1]]
#   X1.10
#1     NA
#2      1
#3      2
#4      3
#5      4
#6      5
#7      6
#8      7
#9      8
#10     9
#11    10
#
#[[2]]
#   X1.9
#1     1
#2     2
#3    NA
#4     3
#5    NA
#6     4
#7     5
#8     6
#9     7
#10    8
#11    9

以上是关于将第N行的NAs插入到data.frames列表中,从列表中插入N行。的主要内容,如果未能解决你的问题,请参考以下文章

从列表中合并并平均每15个data.frames

data.frames 列表的快速矢量化合并

使用 R 将列表的元素保存为 data.frames

将第一个文件的第一列与第二个文件中的行匹配,然后将第二个文件中匹配行的最后一列插入第一个文件中的新第一列

R - 子集列表data.frames由矢量值

将第一个列表和最后一个列表中的特定值保存到 SQLite