[英]insert row in data frame without creating new columns with R
我有这个 :
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,但结果不是我期望的。
谢谢
您的新行比其余的短。 因此,您将必须在第三栏中填写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
为所需值)。
附录:
如果列数是可变的,则可以使用@asb的答案,也可以使用以下方法:
mydf <- rbind(mydf[1:2,],NA,mydf[3:nrow(mydf),])
mydf[3,1:2] <- c(0,0)
怎么样:
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链接到的可能重复项: 将新行添加到数据框,在特定的行索引处,未附加? 。 您需要做的与该答案不同的唯一事情是这一部分:
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的行添加到名为“ edges”的数据的变量1中,只需执行以下操作
allEdges <- data.frame(c(edges$V1,edges$V2))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.