#r #dplyr
#r #dplyr
Вопрос:
У меня есть набор данных «gf» со списком переменных «v», которыми я манипулирую. Сначала я использую mutate_at, чтобы умножить каждую переменную в «v» на 1000, а затем разделить ее на gf $ лет. Эта часть кода работает отлично:
v = c("Public_Welf_Total_Exp", "Welf_Cash_Total_Exp", "Welf_Cash_Cash_Assist", "Welf_Ins_Total_Exp","Total_Educ_Direct_Exp", "Higher_Ed_Total_Exp",
"Welf_NEC_Cap_Outlay","Welf_NEC_Direct_Expend", "Welf_NEC_Total_Expend", "Total_Educ_Assist___Sub", "Health_Total_Expend", "Total_Hospital_Total_Exp",
"Welf_Vend_Pmts_Medical","Hosp_Other_Total_Exp","Unemp_Comp_Total_Exp", "Unemp_Comp_Cash___Sec", "Total_Unemp_Rev", "Hous___Com_Total_Exp", "Hous___Com_Construct", "Total_Expenditure", "Total_IG_Expenditure", "Direct_Expenditure")
gf = gf %>% group_by(FIPS_State, FIPS_County) %>% mutate_at(v, ~ ifelse(. !=0, (. *1000)/gf$years, .)) %>% ungroup()
Однако непосредственно под этим кодом я запускаю следующую строку, которая должна делить переменные в «v» на gf $ Population, но она вычисляет неправильные оценки, и я понятия не имею, почему:
gf = gf %>% group_by(FIPS_State, FIPS_County) %>% mutate_at(v, ~ ifelse(. !=0, (. / gf$Population), .)) %>% ungroup()
Кто-нибудь может выяснить, что не так с этим кодом? Заранее спасибо!
Ниже приведены первые 4 строки «gf», прежде чем я запущу обе команды mutate_at:
dput(gf[1:4, ])
structure(list(FIPS_State = c(1L, 1L, 1L, 1L), FIPS_County = c(1,
3, 5, 7), Public_Welf_Total_Exp = c(1396, 5770, 1369, 1020),
Welf_Cash_Total_Exp = c(0, 14, 0, 0), Welf_Cash_Cash_Assist = c(0,
14, 0, 0), Welf_Ins_Total_Exp = c(0, 0, 0, 0), Total_Educ_Direct_Exp = c(0,
1166, 285, 0), Higher_Ed_Total_Exp = c(0, 0, 0, 0), Welf_NEC_Cap_Outlay = c(0,
432, 5, 8), Welf_NEC_Direct_Expend = c(1382, 5720, 1260,
1020), Welf_NEC_Total_Expend = c(1382, 5723, 1369, 1020),
Total_Educ_Assist___Sub = c(0, 0, 0, 0), Health_Total_Expend = c(1166,
9386, 777, 394), Total_Hospital_Total_Exp = c(4, 8305, 0,
1656), Welf_Vend_Pmts_Medical = c(0, 0, 0, 0), Hosp_Other_Total_Exp = c(4,
0, 0, 1656), Unemp_Comp_Total_Exp = c(0, 0, 0, 0), Unemp_Comp_Cash___Sec = c(0,
0, 0, 0), Total_Unemp_Rev = c(0, 0, 0, 0), Hous___Com_Total_Exp = c(2106,
7364, 5900, 0), Hous___Com_Construct = c(328, 2593, 4732,
0), Total_Expenditure = c(267027, 1961849, 210770, 56991),
Total_IG_Expenditure = c(25832, 20884, 16994, 4432), Direct_Expenditure = c(241195,
1940965, 193776, 52559), Population = c(34730.7272727273,
100775.142857143, 25895.6666666667, 16446.8333333333), years = c(21,
21, 21, 20)), row.names = c(NA, -4L), class = c("tbl_df",
"tbl", "data.frame"))
Комментарии:
1. Я предполагаю
gf$Population
, что это проблема. Вы уже указалиgf %>% ...
в начале, поэтому можете просто захотетьPopulation
вместо этого.2. вы абсолютно правы — спасибо!!
3. Это действительно так? Хотя вы не должны использовать
gf$
вdplyr
каналах, но меняет ли это вычисления здесь?. Я даже не понимаю, зачем вам это нужноgroup_by
.4. по-видимому, когда я пробую это без «gf $», это работает — не уверен, почему это также влияет на вычисления. Кроме того, вы правы — мне не нужен group_by для этой строки! Спасибо