среднее количество столбцов в соответствии со значением в других - PullRequest
0 голосов
/ 05 марта 2020

Вот данные, с которыми я работаю:

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 

Чтобы подготовить данные для регрессии панели, я хочу усреднить ненулевые значения в fee_per_inc, 4-м столбце, в соответствии с последние три столбца; например,

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, избыточные строки и go в регрессию панели.

Ответы [ 2 ]

2 голосов
/ 05 марта 2020

просто новичок ie здесь, но может быть что-то вроде этого?

maindf_2 <- maindf_1 %>% 
  mutate(fee_per_inc = ifelse(fee_per_inc==0,NA, fee_per_inc)) %>% 
  group_by(low_fee, middle_fee, high_fee) %>% 
  mutate(low_fee_avg = ifelse(low_fee !=0, mean(fee_per_inc, na.rm = T), NA),
         mid_fee_avg = ifelse(middle_fee !=0, mean(fee_per_inc, na.rm = T), NA),
         high_fee_avg = ifelse(high_fee !=0, mean(fee_per_inc, na.rm = T), NA)
  ) %>% 
  ungroup() %>% 
  select(-ends_with("_fee"))
1 голос
/ 05 марта 2020

Один из способов сделать это - преобразовать данные в длинный формат, удалить строки с 0 значениями, группировать по regional_schlüssel и уникальными именами столбцов. Мы можем взять mean ненулевых fee_per_inc значений, привести данные к широкоформатному формату и удалить ненужные столбцы.

library(dplyr)
library(tidyr)


maindf_1 %>%
  pivot_longer(cols = ends_with('fee')) %>%
  filter(value != 0) %>%
  group_by(regional_schlüssel, grp = data.table::rleid(name)) %>%
  mutate(value =  mean(fee_per_inc[fee_per_inc != 0],  na.rm = TRUE), 
         row = row_number()) %>%
  pivot_wider(values_fill = list(value  =  0)) %>%
  ungroup() %>%
  select(-grp, -fee_per_inc, -row)


#    year regional_schlüssel age_group fert_total daily_hours low_fee middle_fee high_fee
#   <int>              <dbl> <fct>          <dbl> <fct>         <dbl>      <dbl>    <dbl>
# 1  2006       12246436188. -8            0.0291 8           0.00331    0              0
# 2  2006       12246436188. -8            0.0291 8           0.00331    0              0
# 3  2006       12246436188. -8            0.0291 8           0.00331    0              0
# 4  2006       12246436188. -8            0.0291 8           0          0.00460        0
# 5  2006       12246436188. -8            0.0291 8           0          0.00460        0
# 6  2006       12246436188. -8            0.0291 8           0          0.00460        0
# 7  2006       12246436188. -8            0.0291 8           0.00197    0              0
# 8  2006       12246436188. -8            0.0291 8           0.00197    0              0
# 9  2006       12246436188. -8            0.0291 8           0.00197    0              0
#10  2006       12246436188. -8            0.0291 8           0          0.00308        0
 # … with 9,907 more rows
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...