有条件地向 data.frame 添加行 [英] adding rows to data.frame conditionally

查看:30
本文介绍了有条件地向 data.frame 添加行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a big data.frame of flowers and fruits in a plant for a 30 years survey. I want to add zeros (0) in some rows which represent individuals in specific months where the plant did not have flowers or fruits (because it is a seasonal species).

例子:

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

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

I want to add the months that are not included with values of zero so I was thinking in a function that recognize the missing months and fill them with 0.

谢谢.

推荐答案

## 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

这篇关于有条件地向 data.frame 添加行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆