【问题标题】:add summary `n` from one dataframe to another dataframe (tidyverse)将摘要“n”从一个数据帧添加到另一个数据帧(tidyverse)
【发布时间】:2020-10-06 02:40:48
【问题描述】:

我想知道是否有办法将DATA2 中的fpc 列替换为从DATA1 获得的相应fpc

library(tidyverse)

dat <- read.csv('https://raw.githubusercontent.com/rnorouzian/d/master/su.csv')

## 10000 rows ################
 DATA1 <- dat %>%
    group_by(across(all_of(c("gender", "pre")))) %>%
    summarise(n = n(), .groups = 'drop') %>%
    mutate(fpc = n/sum(n)) %>% 
    right_join(dat)


dat2 <- read.csv('https://raw.githubusercontent.com/rnorouzian/d/master/out.csv')
  
## 200 rows #################
DATA2 <- dat2 %>%
  group_by(across(all_of(c("gender", "pre")))) %>%
  summarise(n = n(), .groups = 'drop') %>%
  mutate(fpc = n/sum(n)) %>% 
  right_join(dat2)

【问题讨论】:

    标签: r dataframe dplyr tidyverse tidyr


    【解决方案1】:

    您可以加入数据框并使用coalesceDATA2 中选择fpc

    library(dplyr)
    
    result <- DATA2 %>%
               left_join(DATA1 %>% distinct(gender, pre, fpc), 
                         by = c('gender', 'pre')) %>%
               mutate(fpc = coalesce(fpc.y, fpc.x)) %>%
               select(names(DATA2))
    
    nrow(result)
    #[1] 200
    

    【讨论】:

    【解决方案2】:

    data.table这样做会更有效

    library(data.table)
    setDT(DATA2)[as.data.table(unique(DATA1[c('gender', 'pre', 'fpc')])),
                fpc := i.fpc, on = .(gender, pre)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-23
      • 1970-01-01
      • 2018-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多