r - 在保留组的同时填充数字变量
问题描述
[编辑以反映一个更好的例子]
假设我有一个这样的数据框:
df <- data.frame(x = c("A","A","B", "B"), year = c(2001,2004,2002,2005))
> df
x year
1 A 2001
2 A 2004
3 B 2002
4 B 2005
如何year
在保留的同时增加 1 x
?我想填写,year
以便顺序是这样的:
x year
1 A 2001
2 A 2002
3 A 2003
4 A 2004
5 B 2002
6 B 2003
7 B 2004
8 B 2005
谁能推荐一个这样做的好方法?
@user 推荐这种方法:
> data.frame(year = min(df$year):max(df$year)) %>%
full_join(df) %>%
fill(x)
Joining, by = "year"
year x
1 2001 A
2 2002 B
3 2003 B
4 2004 A
5 2005 B
但是,这与所需的输出不匹配。
解决方案
使用基础 R(在 的帮助下zoo
):
full_df = data.frame(year = min(df$year):max(df$year))
df = merge(df, full_df, all = TRUE)
df = df[order(df$year), ]
df$x = zoo::na.locf(df$x)
df
# year x
# 1 2001 A
# 2 2002 A
# 3 2003 A
# 4 2004 B
# 5 2005 B
# 6 2006 B
# 7 2007 C
使用“tidyverse”
df <- data.frame(x = LETTERS[1:3], year = c(2001,2004,2007))
library(dplyr)
library(tidyr)
df = df %>% mutate(year = factor(year, levels = min(year):max(year))) %>%
complete(year) %>%
fill(x) %>%
mutate(year = as.numeric(as.character(year)))
df
# # A tibble: 7 x 2
# year x
# <dbl> <fctr>
# 1 2001 A
# 2 2002 A
# 3 2003 A
# 4 2004 B
# 5 2005 B
# 6 2006 B
# 7 2007 C
推荐阅读
- javascript - 将 Excel 宏转换为 Google 工作表
- python - 尽管有 url 模式,但无法从浏览器访问 Django 站点
- python - 如何检查我的客户端套接字中的 recv 是否为空
- javascript - 使用 Javascript 更改图像源 - 基本功能不起作用
- rest - 有关 HTTP 请求为何被 403 处理的详细信息
- time - Jmeter在分布式模式下的响应时间突然增加
- .net - 如何在 VB.net 中正确地将字符串转换为十进制
- flutter - 颤振:showDialog() 上的 setState
- c# - 从后面的代码启动命令行 exe (ngrok) 的正确方法
- django - 如何在 JSONField 上使用 django-filter