我有一个样本 ID 向量,需要位于我的数据框中(否则我应用于它们的函数将不起作用),但缺失(称为missing)。
对于 中的每个元素missing,我想在数据帧的末尾添加一行,其中包含 ID,但该行中的其余数据(对于所有其他列)都是 NA。
根据我看到的其他一些仅讨论添加空行的 Stack Overflow 帖子,我目前正在尝试的内容如下:
for (element in missing) {
df[nrow(df)+1,] <- NA
df[nrow(df),1] <- element
}
Run Code Online (Sandbox Code Playgroud)
有没有更简单、更快的方法来做到这一点,因为即使缺少 1000 个元素也需要一些时间,而我以后可能需要处理更多元素。
1)使用内置anscombe数据框,插入两行,将 -1 和 -3 放入 x1 列中。
library(tibble)
new <- c(-1, -3)
add_row(anscombe, x1 = new)
Run Code Online (Sandbox Code Playgroud)
给予:
x1 x2 x3 x4 y1 y2 y3 y4
1 10 10 10 8 8.04 9.14 7.46 6.58
2 8 8 8 8 6.95 8.14 6.77 5.76
3 13 13 13 8 7.58 8.74 12.74 7.71
4 9 9 9 8 8.81 8.77 7.11 8.84
5 11 11 11 8 8.33 9.26 7.81 8.47
6 14 14 14 8 9.96 8.10 8.84 7.04
7 6 6 6 8 7.24 6.13 6.08 5.25
8 4 4 4 19 4.26 3.10 5.39 12.50
9 12 12 12 8 10.84 9.13 8.15 5.56
10 7 7 7 8 4.82 7.26 6.42 7.91
11 5 5 5 8 5.68 4.74 5.73 6.89
12 -1 NA NA NA NA NA NA NA
13 -3 NA NA NA NA NA NA NA
Run Code Online (Sandbox Code Playgroud)
2)这是一个基本解决方案。new来自 (1)
(如果覆盖anscombe可以,但通常这会使调试变得更加困难,则省略第一行并替换anscombe2为anscombe。)
anscombe2 <- anscombe
anscombe2[nrow(anscombe2) + seq_along(new), "x1"] <- new
Run Code Online (Sandbox Code Playgroud)
3)使用 tibble 包(或导入它的 dplyr),我们可以使用 rows_insert。 new来自(1)。
library(dplyr)
rows_insert(anscombe, tibble(x1 = new))
Run Code Online (Sandbox Code Playgroud)