将行添加到具有缺失值的数据框

Jan*_*ary 8 r dataframe

所以我有这个数据框

df <- data.frame( A=1:10, B=LETTERS[1:10], C=letters[1:10], stringsAsFactors= F )
Run Code Online (Sandbox Code Playgroud)

我想在A = 11和C ="K"的数据框中添加一行,但我没有关于C列的信息.事实上,我不知道先验是什么其他列在那里数据框,A和B除外.这些缺失的列应该得到NA.我能想到的最好的是:

tmp <- rep( NA, ncol( df ) ) # Batman!
df <- rbind( df, tmp )
df[ nrow( df ), "A" ] <- 11
df[ nrow( df ), "B" ] <- "K"
Run Code Online (Sandbox Code Playgroud)

有更简单的方法吗?

Bro*_*ieG 13

基础版:

new.row <- list(A=11, B="K")
df[nrow(df) + 1, names(new.row)] <- new.row
Run Code Online (Sandbox Code Playgroud)

plyr 版:

library(plyr)
new.row <- data.frame(A=11, B="K", stringsAsFactors=F)
df <- rbind.fill(df, new.row)
Run Code Online (Sandbox Code Playgroud)

两者都产生:

    A B    C
1   1 A    a
2   2 B    b
3   3 C    c
4   4 D    d
5   5 E    e
6   6 F    f
7   7 G    g
8   8 H    h
9   9 I    i
10 10 J    j
11 11 K <NA>
Run Code Online (Sandbox Code Playgroud)

您还可以将基本版本概括为更多行:

more.rows <- data.frame(A=15:20, B=letters[15:20], stringsAsFactors=F)
df[(nrow(df) + 1):(nrow(df) + nrow(more.rows)), names(more.rows)] <- more.rows
Run Code Online (Sandbox Code Playgroud)

生产:

    A B    C
1   1 A    a
2   2 B    b
3   3 C    c
4   4 D    d
5   5 E    e
6   6 F    f
7   7 G    g
8   8 H    h
9   9 I    i
10 10 J    j
11 11 K <NA>
12 15 o <NA>
13 16 p <NA>
14 17 q <NA>
15 18 r <NA>
16 19 s <NA>
17 20 t <NA>
Run Code Online (Sandbox Code Playgroud)


Mat*_*rde 6

这是保留数据类型的替代基本版本。

new.row <- head(df[NA,], 1)
new.row[c('A', 'B')] <- list(A=11, B='K')
rbind(df, new.row)
Run Code Online (Sandbox Code Playgroud)

  • 好的; 第一行的 `df[1,][NA,]` 怎么样?然后我们不生成另一个与 df 大小相同的数据帧。 (3认同)