首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中是否有一个函数来填充变量中缺少的数据

在R中是否有一个函数来填充变量中缺少的数据
EN

Stack Overflow用户
提问于 2021-09-22 02:18:37
回答 2查看 42关注 0票数 1

我有一组拼板数据df1,它们采用以下形式:

代码语言:javascript
复制
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采用以下形式:

代码语言:javascript
复制
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的值,产生以下输出:

代码语言:javascript
复制
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中...这个是可能的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-22 02:20:21

我们可以在fill中使用complete

代码语言:javascript
复制
library(dplyr)
library(tidyr)
df2 %>%
   complete(year = 1990:1994, state) %>%
   group_by(state) %>%
   fill(professionalism, .direction = "updown") %>%
   ungroup %>%
   arrange(state, year)

-output

代码语言:javascript
复制
# 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

数据

代码语言:javascript
复制
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))
票数 1
EN

Stack Overflow用户

发布于 2021-09-22 03:17:05

我认为最简单的方法是在df1中创建一个新列,将年份四舍五入为偶数值,然后对来自df2的数据进行left_join

代码语言:javascript
复制
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"))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69277416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档