繁体   English   中英

如何在 r 中使用 group_by 将 dataframe 的行组合到某些列,但同时保留其他列

[英]How do I use group_by in r to combine rows of a dataframe by some columns, but keep other columns as well

这应该很简单,我只是无法让它工作

我有一个看起来像这样的 dataframe all_emissions_state_total

tribe    state      scc       pollutant      emissions     unit     category    eis     year     fraction 
NA       WY         707       Methane        546           TON      onroad      NA      2011     NA
NA       WY         707       Methane        38            TON      onroad      NA      2011     NA
NA       WY         3405      Methane        2937          TON      onroad      NA      2011     NA
NA       MT         707       Methane        665           TON      onroad      NA      2011     NA
NA       WY         390       CO2            740           TON      onroad      NA      2011     NA
NA       MT         390       CO2            12            TON      onroad      NA      2011     NA
NA       WY         3405      Methane        329           TON      onroad      NA      2011     NA
GHYU     WY         390       CO2            44            TON      point       NA      2011     NA
BERS     WY         390       CO2            64445         TON      point       NA      2011     596
SDSH     KS         707       Methane        123           TON      point       NA      2011     3890
SDSH     MT         707       Methane        58            TON      point       NA      2011     112

我希望它看起来像这样:

state       scc        pollutant        emissions        unit        year
WY          707        Methane          584              TON         2011
MT          707        Methane          723              TON         2011
WY          3405       Methane          3266             TON         2011
WY          390        CO2              65229            TON         2011
MT          390        CO2              12               TON         2011
KS          707        Methane          123              TON         2011

在原来的 dataframe all_emissions_state_totaltribestatesccpollutantemissionscategoryeisfraction变化。 unit始终为 TON, year始终为 2011。

我希望这些行按具有相同statesccpollutant的行进行分组,并且emissions列是被分组的那些行的总和。 tribe , category , eis , fraction无关紧要,可以去掉,但unityear需要保留。

这是我认为可行的:

all_emissions_state <- all_emissions_state_total %>%
                                group_by( state, scc, pollutant ) %>% 
                                summarise( emissions = sum( emissions ) )

但我的 output 是一个 1x1 dataframe all_emissions_state ,它具有列emissions和 1 个值,即来自 Z6A8064B5DF479450500553C47DZ5 的所有排放的总和。

Base 中的一个选项

    New_df <- do.call(rbind,lapply(split(df, with(df,paste0(state,scc,pollutant))), function(x) x[1,c("state","scc","pollutant","emissions","unit","year")]))
    New_df$emissions <- sapply( split(df$emissions, with(df,paste0(state,scc,pollutant))), sum)
    row.names(New_df) <- NULL

> New_df
  state  scc pollutant emissions unit year
1    KS  707   Methane       123  TON 2011
2    MT  390       CO2        12  TON 2011
3    MT  707   Methane       723  TON 2011
4    WY 3405   Methane      3266  TON 2011
5    WY  390       CO2     65229  TON 2011
6    WY  707   Methane       584  TON 2011

如果单位/年在组中保持不变,这应该有效。 尝试把 dplyr::sumarise() 可能你有 function 冲突。

all_emissions_state <- all_emissions_state_total %>%
      dplyr::group_by(state, scc, pollutant) %>% 
      dplyr::summarise( 
         emissions = sum(emissions),
         unit = dplyr::first(unit),
         year = dplyr::first(year)
    )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM