【问题标题】:adding rows to data.frame conditionally有条件地向 data.frame 添加行
【发布时间】:2016-10-01 11:26:03
【问题描述】:

我有一个大的data.frame 的植物中的花和水果,进行了 30 年的调查。我想在某些行中添加零 (0),代表植物没有 flowersfruits 的特定月份的个体(因为它是季节性物种)。

例子:

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

我想添加不包含在零值中的月份,所以我正在考虑一个识别缺失月份并用 0 填充它们的函数。

谢谢。

【问题讨论】:

标签: r function conditional rows rbind


【解决方案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
#..   ...   ...     ...    ...

【讨论】:

    【解决方案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
    

    【讨论】:

    • 谢谢,这正是我想要的。
    • 没有丑陋的新管道运算符的基础库版本非常好。总是喜欢基地。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 2017-06-10
    相关资源
    最近更新 更多