2016-06-01 19 views
0

私は30年の調査のために花と果物の大きいdata.frameを工場に持っています。植物がflowersまたはfruits(季節の種であるため)がない特定の月に個体を表すいくつかの行にゼロ(0)を追加したい。条件付きでdata.frameに行を追加する

例:

Year Month Flowers Fruits 
2004 6  25  2 
2004 7  48  4 
2005 7  20  1 
2005 8  16  1 

私は行方不明の数ヶ月を認識機能におけるので、私は考えていたゼロの値に含まれていませんヶ月を追加し、0

でそれらを埋めるためにしたいのおかげ。

+0

https://stackoverflow.com/questions/46377613/filling-missing-を参照してくださいを使用しています今月のシリーズ - 46378470#46378470 –

答えて

2
## x is the data frame you gave in the question 

x <- data.frame(
    Year = c(2004, 2004, 2005, 2005), 
    Month = c(6, 7, 7, 8), 
    Flowers = c(25, 48, 20, 16), 
    Fruits = c(2, 4, 1, 1) 
) 

## y is the data frame that will provide the missing values, 
## so you can replace 2004 and 2005 with whatever your desired 
## time interval is 

y <- expand.grid(Year = 2004:2005, Month = 1:12) 

## this final step fills in missing dates and replaces NA's with zeros 

library(tidyr) 
x <- merge(x, y, all = TRUE) %>% 
    replace_na(list(Flowers = 0, Fruits = 0)) 

## if you don't want to use tidyr, you can alternatively do 

x <- merge(x, y, all = TRUE) 
x[is.na(x)] <- 0 

それは次のようになります。ここでは

head(x, 10) 

# Year Month Flowers Fruits 
# 1 2004  1  0  0 
# 2 2004  2  0  0 
# 3 2004  3  0  0 
# 4 2004  4  0  0 
# 5 2004  5  0  0 
# 6 2004  6  25  2 
# 7 2004  7  48  4 
# 8 2004  8  0  0 
# 9 2004  9  0  0 
# 10 2004 10  0  0 
+0

ありがとう、これは私が探していたものです。 –

1

は別のオプションがexpandleft_join

library(dplyr) 
library(tidyr) 
expand(df1, Year, Month = 1:12) %>% 
     left_join(., df1) %>% 
     replace_na(list(Flowers=0, Fruits=0)) 
# Year Month Flowers Fruits 
# <int> <int> <dbl> <dbl> 
#1 2004  1  0  0 
#2 2004  2  0  0 
#3 2004  3  0  0 
#4 2004  4  0  0 
#5 2004  5  0  0 
#6 2004  6  25  2 
#7 2004  7  48  4 
#8 2004  8  0  0 
#9 2004  9  0  0 
#10 2004 10  0  0 
#.. ... ...  ... ... 
関連する問題