在数据框中插入行而不使用R创建新列

时间:2013-07-08 07:55:51

标签: r insert row

我有这个:

    1  2  3
1  10 11 12
2  13 14 15
3  16 17 18
4  19 20 21
5  22 23 24

我想要这个:

    1     2  3
1  10    11 12 
2  13    14 15
3   0  0.00  
4  16    17 18
5  19    20 21
6  22    23 24

谁能告诉我怎么做? 我试过rbind,rbind.fill,smartbind,但结果并不是我所期望的。

谢谢

3 个答案:

答案 0 :(得分:1)

您的新行比其他行短。因此,您必须在第三列填写NA值:

rbind(mydf[1:2,],c(0,0,NA),mydf[3:nrow(mydf),])

如果您插入c(0,0),从而省略NA值,则R将应用矢量回收规则。这意味着,较短的向量将被“拉伸”以匹配所需的长度,从第一个开始再循环其元素。因此,将有效地插入向量c(0,0,0)。您可以选择所需的行为(NA vs 0作为要求的值)。

ADDENDUM:

如果colums的数量是可变的,那么你可以使用@asb的答案或使用以下方法:

mydf <- rbind(mydf[1:2,],NA,mydf[3:nrow(mydf),])
mydf[3,1:2] <- c(0,0)

答案 1 :(得分:1)

怎么样:

insert.under.row.number <- function (mat, rnum, what) {
  if (length(what) != ncol(mat)) what <- c(what, rep_len(NA, ncol(mat) - length(what)))
  rbind(mat[1:rnum, ], what, mat[(rnum + 1):nrow(mat), ])
}

如果你给出的是c(0,0.00),那么这将把NA放在第三列。


实际上,我只想链接到@dickoa链接到Add new row to dataframe, at specific row-index, not appended?的可能副本。你需要做的唯一不同的答案是这部分:

if (length(what) != ncol(mat)) what <- c(what, rep_len(NA, ncol(mat) - length(what)))

所以,就这个差异而言,我正在离开我的答案。但是也应该检查一下这个答案。


以下是您链接到的输入文件中的示例:

  V1      V2       V3      V4     V5          V6   V7     V8 V9   V10
1  1 4068961 731027.9 186.849 1.5000  sondage006 24.0 26.000 NA 2.000
2  1 4068963 731027.8 185.317 0.9500  sondage006 26.0 28.000 NA 2.000
3  1 4068964 731027.8 183.785 2.1000  sondage006 28.0 30.000 NA 2.000
4  1 4068965 731027.8 182.253 1.3000  sondage006 30.0 32.000 NA 2.000
5  1 4068967 731027.8 180.721 0.5000  sondage006 32.0 34.000 NA 2.000
6  1 4068916 731018.2 181.267 0.5732 sondage006A 25.8 27.667 NA 1.867

这样做之后:yy <- insert.under.row.number(xx, 3, c(0, 0.0))

    V1      V2       V3      V4   V5         V6 V7 V8 V9 V10
1    1 4068961 731027.9 186.849 1.50 sondage006 24 26 NA   2
2    1 4068963 731027.8 185.317 0.95 sondage006 26 28 NA   2
3    1 4068964 731027.8 183.785 2.10 sondage006 28 30 NA   2
4    0       0       NA      NA   NA       <NA> NA NA NA  NA
410  1 4068965 731027.8 182.253 1.30 sondage006 30 32 NA   2
5    1 4068967 731027.8 180.721 0.50 sondage006 32 34 NA   2

行名似乎搞砸了。

答案 2 :(得分:0)

例如,您希望将变量2的行添加到名为&#34; edge&#34;的数据的变量1中。 就像这样做

allEdges <- data.frame(c(edges$V1,edges$V2))