添加一行到数据帧与缺失值

添加一行到数据帧与缺失值

问题描述:

所以我有这个数据帧添加一行到数据帧与缺失值

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

我想添加一行与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" 

有没有更简单的方法?

+0

看看我添加到我的答案的新版本。我认为那是最干净的。 – BrodieG

基础版本:

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

plyr版本:

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

都产生:

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> 

您也可以概括的基本版本更多行:

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 

生产:

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> 
+0

很好,谢谢。 – January

+0

@一月,我还添加了一个“基本”版本。 – BrodieG

+0

在基本版本中很好地使用'match',但请注意这种方法会将整数列更改为字符。 –

这里的一个替代基础版本,可以保留数据类型。

new.row <- head(df[NA,], 1) 
new.row[c('A', 'B')] <- list(A=11, B='K') 
rbind(df, new.row) 
+0

不错;第一行的'df [1,] [NA,]'怎么样?然后,我们不会生成与df相同大小的另一个数据帧。 – January