[英]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_total
、 tribe
、 state
、 scc
、 pollutant
、 emissions
、 category
、 eis
和fraction
变化。 unit
始终为 TON, year
始终为 2011。
我希望这些行按具有相同state
、 scc
和pollutant
的行进行分组,并且emissions
列是被分组的那些行的总和。 tribe
, category
, eis
, fraction
无关紧要,可以去掉,但unit
和year
需要保留。
这是我认为可行的:
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.