2016-06-01 3 views
0

У меня есть большой data.frame цветов и фруктов на заводе для 30-летнего обследования. Я хочу добавить нули (0) в некоторые строки, которые представляют людей в определенные месяцы, когда завод не имел flowers или fruits (потому что это сезонный вид).добавление строк в 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- month-in-time-series-with-na/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

Вот еще один вариант использования expand и left_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 
#.. ... ...  ... ... 
Смежные вопросы