我有一组拼板数据df1,它们采用以下形式:
df1:
year state eligibility coverage
1990 AL .87 .70
1991 AL .78 .61
1992 AL .82 .63
1993 AL .79 .69
1994 AL .82 .73
1990 AK .91 .88
1991 AK .83 .79
1992 AK .82 .71
1993 AK .77 .69
1994 AK .82 .73我需要从一组不同的数据df2中添加一个变量“专业性”,但问题是df2只有偶数年的观察值。因此,df2采用以下形式:
df2:
year state professionalism
1990 AL 1.33
1992 AL 1.40
1994 AL 1.42
1990 AK -0.92
1992 AK -0.98
1994 AK -1.02 是否有一个函数R将奇数年添加到df2中,复制年份+1的值,产生以下输出:
df2':
year state professionalism
1990 AL 1.33
1991 AL 1.40
1992 AL 1.40
1993 AL 1.42
1994 AL 1.42
1990 AK -0.92
1991 AK -0.98
1992 AK -0.98
1993 AK -1.02
1994 AK -1.02 然后,我可以将新的df2‘中的professionalism变量合并到df1中...这个是可能的吗?
发布于 2021-09-22 02:20:21
我们可以在fill中使用complete
library(dplyr)
library(tidyr)
df2 %>%
complete(year = 1990:1994, state) %>%
group_by(state) %>%
fill(professionalism, .direction = "updown") %>%
ungroup %>%
arrange(state, year)-output
# A tibble: 10 x 3
year state professionalism
<int> <chr> <dbl>
1 1990 AK -0.92
2 1991 AK -0.98
3 1992 AK -0.98
4 1993 AK -1.02
5 1994 AK -1.02
6 1990 AL 1.33
7 1991 AL 1.4
8 1992 AL 1.4
9 1993 AL 1.42
10 1994 AL 1.42数据
df2 <- structure(list(year = c(1990L, 1992L, 1994L, 1990L, 1992L, 1994L
), state = c("AL", "AL", "AL", "AK", "AK", "AK"), professionalism = c(1.33,
1.4, 1.42, -0.92, -0.98, -1.02)), class = "data.frame", row.names = c(NA,
-6L))发布于 2021-09-22 03:17:05
我认为最简单的方法是在df1中创建一个新列,将年份四舍五入为偶数值,然后对来自df2的数据进行left_join:
library(tidyverse)
#Setting up example data
df1 <- tribble(
~year, ~state, ~eligibility, ~coverage,
1990, "AL", .87, .70,
1991, "AL", .78, .61,
1992, "AL", .82, .63,
1993, "AL", .79, .69,
1994, "AL", .82, .73,
1990, "AK", .91, .88,
1991, "AK", .83, .79,
1992, "AK", .82, .71,
1993, "AK", .77, .69,
1994, "AK", .82, .73)
df2 <- tribble(
~year, ~state, ~professionalism,
1990, "AL", 1.33,
1992, "AL", 1.40,
1994, "AL", 1.42,
1990, "AK", -0.92,
1992, "AK", -0.98,
1994, "AK", -1.02)
#Create a "year even" variable in df1, then left join from df2
df1 <- df1 %>% mutate(year_even = ceiling(year/2)*2)
df1 <- left_join(df1, df2, by = c("year_even" = "year", "state" = "state"))https://stackoverflow.com/questions/69277416
复制相似问题