【发布时间】:2020-03-05 10:38:26
【问题描述】:
这是我正在处理的数据:
library(RCurl)
x <- getURL("https://raw.githubusercontent.com/dothemathonthatone/maps/master/main_test.csv")
maindf <- read.csv(text = x)
maindf_1 <- maindf %>%
dplyr::select(year, regional_schlüssel, age_group, fee_per_inc, fert_total, daily_hours, low_fee, middle_fee, high_fee)
head(maindf_1)
year regional_schlüssel fee_per_inc fert_total daily_hours low_fee middle_fee high_fee
2006 12246436188 0.000000000 0.02905331 8 1 0 0
2006 12246436188 0.002770760 0.02905331 8 1 0 0
2006 12246436188 0.003857333 0.02905331 8 1 0 0
2006 12246436188 0.004237633 0.02905331 8 0 1 0
2006 12246436188 0.004482112 0.02905331 8 0 1 0
2006 12246436188 0.005085077 0.02905331 8 0 1 0
为了准备面板回归的数据,我想根据最后三列对第 4 列 fee_per_inc 中的非零值进行平均;例如,
year regional_schlüssel age_group fee_per_inc fert_total daily_hours low_fee middle_fee high_fee
2006 12246436188 -8 0.000000000 0.02905331 8 .003314047 0 0
2006 12246436188 -8 0.002770760 0.02905331 8 .003314047 0 0
2006 12246436188 -8 0.003857333 0.02905331 8 .003314047 0 0
2006 12246436188 -8 0.004237633 0.02905331 8 0 .004601607 0
2006 12246436188 -8 0.004482112 0.02905331 8 0 .004601607 0
2006 12246436188 -8 0.005085077 0.02905331 8 0 .004601607 0
然后删除最后三行中的零:
year regional_schlüssel age_group fee_per_inc fert_total daily_hours low_fee middle_fee high_fee
2006 12246436188 -8 0.000000000 0.02905331 8 .003314047 .004601607 0
2006 12246436188 -8 0.002770760 0.02905331 8 .003314047 .004601607 0
2006 12246436188 -8 0.003857333 0.02905331 8 .003314047 .004601607 0
除了在这个例子中最后一行仍然有零。
完成此操作后,我可以删除 fee_per_inc、冗余行并进入面板回归。
【问题讨论】:
-
您需要
maindf_1 %>% group_by(regional_schlüssel) %>% mutate_at(vars(ends_with('fee')), ~replace(., . != 0, mean(na.omit(.))))吗?这会将非零值替换为该组中该列的非零值mean。 -
@RonakShah 谢谢,但这在运行代码时也会带来一些问题。数字未正确汇总
-
您能解释一下您是如何执行聚合的吗?哪些列应该更改为什么值?
-
@RonakShah 感谢您的提问:在上面的第一个数据帧中,
0.002770760和0.003857333的平均值将位于列low_fee的前三行;那么0.004237633、0.004482112和0.005085077值的平均值将进入middle_fee的列中。 -
如上例中的最后一个数据框。