2014-02-26 39 views
3

所以我有這個數據幀添加一行到數據幀與缺失值

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

回答

7

基礎版本:

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',但請注意這種方法會將整數列更改爲字符。 –

2

這裏的一個替代基礎版本,可以保留數據類型。

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