http://stackoverflow.com/questions/22523131
рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рд╢рд╛рдпрдж рдбреНрд░реЙрдк = FALSE рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рд╣реИрдбрд▓реАред
:+1: рдЖрдЬ рдЙрд╕реА рдореБрджреНрджреЗ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛, drop = FALSE
рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝реА рдорджрдж рд╣реЛрдЧреА!
dplyr рдореЗрдВ .drop = FALSE рд╕рдорддреБрд▓реНрдп рдбрд╛рд▓рдиреЗ рдХреА рд╕рдордп рд╕реАрдорд╛ рдкрд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░? рдХреБрдЫ rCharts рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЗрд╕ рдмреАрдЪ рдореБрдЭреЗ рдЖрдкрдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдВрдХ рдореЗрдВ рдЬрд╡рд╛рдм рдорд┐рд▓ рдЧрдпрд╛ред
http://stackoverflow.com/questions/22523131
рдореИрдВрдиреЗ рджреЛ рдЪрд░ рджреНрд╡рд╛рд░рд╛ рд╕рдореВрд╣реАрдХреГрдд рдХрд┐рдпрд╛ред
+1 рдЦрд╛рд▓реА рд╕рдореВрд╣реЛрдВ рдХреЛ рди рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП
#486 рдФрд░ #413 рдХреЗ рд╕рд╛рде рдХреБрдЫ рдУрд╡рд░рд▓реИрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЦрд╛рд▓реА рд╕рдореВрд╣реЛрдВ рдХреЛ рди рдЫреЛрдбрд╝рдирд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рд╕рд╛рд░рд╛рдВрд╢ рддрд╛рд▓рд┐рдХрд╛рдПрдБ рдмрдирд╛рддреЗ рд╕рдордп рдЕрдХреНрд╕рд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
+1 - рдпрд╣ рдХрдИ рд╡рд┐рд╢реНрд▓реЗрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреАрд▓-рдмреНрд░реЗрдХрд░ рд╣реИ
рдореИрдВ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ - рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред
@romainfrancois рд╡рд░реНрддрдорд╛рди рдореЗрдВ build_index_cpp()
рдбреНрд░реЙрдк рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рд╕рдореНрдорд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:
t1 <- data_frame(
x = runif(10),
g1 = rep(1:2, each = 5),
g2 = factor(g1, 1:3)
)
g1 <- grouped_df(t1, list(quote(g2)), drop = FALSE)
attr(g1, "group_size")
# should be c(5L, 5L, 0L)
attr(g1, "indices")
# shoud be list(0:4, 5:9, integer(0))
рдбреНрд░реЙрдк рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рдХреЗрд╡рд▓ рддрднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдХрд┐рд╕реА рдХрд╛рд░рдХ рджреНрд╡рд╛рд░рд╛ рд╕рдореВрд╣реАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдореЗрдВ рдкреНрд░рддрд┐ рдХрд╛рд░рдХ рд╕реНрддрд░ рдкрд░ рдПрдХ рд╕рдореВрд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рднрд▓реЗ рд╣реА рд╡рд╣ рд╕реНрддрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбреЗрдЯрд╛ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛ рдпрд╛ рдирд╣реАрдВред
рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЛрдВ рд╕реЗ рдПрдХрд▓ рддрд╛рд▓рд┐рдХрд╛ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛:
select()
: рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВarrange()
: рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВsummarise()
: рд╢реВрдиреНрдп рдкрдВрдХреНрддрд┐ рд╕рдореВрд╣реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ 0-рд╕реНрддрд░реАрдп рдкреВрд░реНрдгрд╛рдВрдХ рджрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред n()
0 рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП, mean(x)
рд╡рд╛рдкрд╕ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдП NaNfilter()
: рд╕рдореВрд╣реЛрдВ рдХрд╛ рд╕рдореВрд╣ рд╕реНрдерд┐рд░ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП, рднрд▓реЗ рд╣реА рдХреБрдЫ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдЕрдм рдХреЛрдИ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рди рд╣реЛрдВmutate()
: рдЦрд╛рд▓реА рд╕рдореВрд╣реЛрдВ рдХреЗ рд▓рд┐рдП рднрд╛рд╡реЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИрдЖрдЦрд┐рд░рдХрд╛рд░, drop = FALSE
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрдЧрд╛, рдФрд░ рдпрджрд┐ drop = FALSE
рдФрд░ drop = TRUE
рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рдиреА рд╣реЛрддреА рд╣реИ, рддреЛ рдореИрдВ рдЦреБрд╢реА рд╕реЗ drop = FALSE
рд▓рд┐рдП рд╕рдорд░реНрдерди рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ ( рдЪреВрдВрдХрд┐ рдЖрдк рд╣рдореЗрд╢рд╛ рдХрд╛рд░рдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕реНрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЪрд░рд┐рддреНрд░ рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рд╣реИ? рдпрджрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрд╛рдо рд╣реИ, рддреЛ рд╣рдо 0.4 . рддрдХ рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ
@statwonk , @wsurles , @jennybc , @slackline , @mcfrank , @eipi10 рдпрджрд┐ рдЖрдк рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реЛрдЧреА рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдкрд░рд╕реНрдкрд░ рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреЗ рд╕рднреА рддрд░реАрдХреЛрдВ рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░рддрд╛ рд╣реЛред рд╢реВрдиреНрдп-рд▓рдВрдмрд╛рдИ рд╕рдореВрд╣реЛрдВ рдХреЗ рд╕рд╛рдеред
рдЖрд╣ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ drop
рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред рдЗрд╕рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛрддрд╛ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдХрд╛рдо рд╣реИред
рдореИрдВрдиреЗ рдкреБрд▓ рдЕрдиреБрд░реЛрдз # 833 рдЦреЛрд▓рд╛ рд╣реИ рдЬреЛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдПрдХрд▓ рддрд╛рд▓рд┐рдХрд╛ рдХреНрд░рд┐рдпрд╛рдПрдВ рд╢реВрдиреНрдп-рд▓рдВрдмрд╛рдИ рд╡рд╛рд▓реЗ рд╕рдореВрд╣реЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рддреА рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред рдЕрдзрд┐рдХрд╛рдВрд╢ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЬрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ dplyr рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рдлрд▓ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗред
+1, рдпрд╣рд╛рдВ рдХреЛрдИ рд╕реНрдерд┐рддрд┐ рдЕрдкрдбреЗрдЯ рд╣реИ? рдкреНрдпрд╛рд░ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢, рдЦрд╛рд▓реА рд╕реНрддрд░ рд░рдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ!
@ebergelson , рд╢реВрдиреНрдп-рд▓рдВрдмрд╛рдИ рд╡рд╛рд▓реЗ рд╕рдореВрд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рд╡рд░реНрддрдорд╛рди рд╣реИрдХ рдпрд╣рд╛рдВ рд╣реИред рдореБрдЭреЗ рдЕрдХреНрд╕рд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рдмрд╛рд░ рдЪрд╛рд░реНрдЯ рдвреЗрд░ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред
рдпрд╣рд╛рдВ df рдореЗрдВ 3 рдХреЙрд▓рдо рд╣реИрдВ: рдирд╛рдо, рд╕рдореВрд╣ рдФрд░ рдореАрдЯреНрд░рд┐рдХ
df2 <- expand.grid(name = unique(df$name), group = unique(df$group)) %>%
left_join(df, by=c("name","group")) %>%
mutate(metric = ifelse(is.na(metric),0,metric))
рдореИрдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдХрд░рддрд╛ рд╣реВрдВ - рд▓рд╛рдкрддрд╛ рд╕рдореВрд╣реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ, рдлрд┐рд░ рдпрджрд┐ рдХреЛрдИ рд╕рднреА рд╕рдВрдпреЛрдЬрди рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдФрд░ left_join
ред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрдпрд╛рд░ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ... рд╢рд╛рдпрдж рдЗрд╕рд▓рд┐рдП рдХрд┐ рдЗрд╕рдХрд╛ рд╕реАрдзрд╛-рд╕реАрдзрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИред
@wsurles , @bpbond рдзрдиреНрдпрд╡рд╛рдж, рд╣рд╛рдБ рдореИрдВрдиреЗ рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рд╕рдорд╛рди рд╣реА рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ! .рдбреНрд░реЙрдк рдЬреИрд╕реЗ рдмрд┐рд▓реНрдЯ-рдЗрди рдлрд┐рдХреНрд╕ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред
рдмрд╕ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рд╕рд╣рдордд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП - рдпрд╣ рдХрдИ рд╡рд┐рд╢реНрд▓реЗрд╖рдгреЛрдВ рдХрд╛ рдПрдХ рдЕрддрд┐ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд╣рд▓реВ рд╣реИред рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред
рдпрд╣рд╛рдВ рдХреБрдЫ рдФрд░ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рд╣реИ:
> df <- data_frame( x = c(1,1,1,2,2), f = factor( c(1,2,3,1,1) ) )
> df
Source: local data frame [5 x 2]
x f
1 1 1
2 1 2
3 1 3
4 2 1
5 2 1
рдФрд░ рдореИрдВ x
рдлрд┐рд░ f
рджреНрд╡рд╛рд░рд╛ рд╕рдореВрд╣рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдореИрдВ 6 (2x3) рд╕рдореВрд╣реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рд╕рдореВрд╣ (2, 2)
рдФрд░ (2,3)
рдЦрд╛рд▓реА рд╣реИрдВред рдареАрдХ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдЕрдм, рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛:
> df <- data_frame( f = factor( c(1,1,2,2), levels = 1:3), x = c(1,2,1,4) )
> df
Source: local data frame [4 x 2]
f x
1 1 1
2 1 2
3 2 1
4 2 4
рдФрд░ рдореИрдВ f
рдлрд┐рд░ x
рдЖрдзрд╛рд░ рдкрд░ рд╕рдореВрд╣ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╕рдореВрд╣ рдХреНрдпрд╛ рд╣реЛрдВрдЧреЗ? @ рд╣реИрдбрд▓реА
рджреЛрдиреЛрдВ stats::aggregate
рдФрд░ plyr::ddply
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ 4 рд╕рдореВрд╣реЛрдВ рдХреЛ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ (1,1; 1,2; 2,1; рдФрд░ 2,4), рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ .
рдХреНрдпрд╛ рдпрд╣ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп table()
рд╕рд╣рдордд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛рдиреА, 9 рд╕рдореВрд╣ рд▓реМрдЯрд╛рдПрдВ?
> table(df$f, df$x)
1 2 4
1 1 1 0
2 1 0 1
3 0 0 0
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ df %>% group_by(f, x) %>% tally
рдореВрд▓ рд░реВрдк рд╕реЗ with(df, as.data.frame(table(f, x)))
рдФрд░ ddply(df, .(f, x), nrow, .drop=FALSE)
рдЬреИрд╕рд╛ рд╣реА рдкрд░рд┐рдгрд╛рдо рджреЗрдЧрд╛ред
рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рд╣рдорд╛рд░рд╛ рд╡рд╛рдВрдЫрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╢реВрдиреНрдп-рд▓рдВрдмрд╛рдИ рд╡рд╛рд▓реЗ рд╕рдореВрд╣реЛрдВ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рдерд╛ рдпрджрд┐ рд╡реЗ рдХрд╛рд░рдХ рд╣реИрдВ (рдЬреИрд╕реЗ .drop рдореЗрдВ plyr), рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо @huftis рдХрд╛ рд╕реБрдЭрд╛рд╡ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрдирд╛ рдбреНрд░реЙрдк = рд╕рдЪ рд╣реИ, рддрд╛рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдмрджрд▓рд╛рд╡ рди рд╣реЛ, рдлрд┐рд░ рд╕реЗ
рд╣рдореНрдо, рдореЗрд░реЗ рд╕рд┐рд░ рдХреЛ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд▓рдкреЗрдЯрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдЬреИрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рдпреЗ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд╡рд┐рдЪрд╛рд░ рдкреНрд░рдпреЛрдЧ рд╕рд╣реА рд▓рдЧрддреЗ рд╣реИрдВ?
df <- data_frame(x = 1, y = factor(1, levels = 2))
df %>% group_by(x) %>% summarise(n())
#> x n
#> 1 1
df %>% group_by(y) %>% summarise(n())
#> y n
#> 1 1
#> 2 0
df %>% group_by(x, y) %>% summarise(n()
#> x y n
#> 1 1 1
#> 1 2 0
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ x
рдореЗрдВ рдПрдХрд╛рдзрд┐рдХ рдорд╛рди рд╣реЛрдВ? рдХреНрдпрд╛ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?
df <- data_frame(x = 1:2, y = factor(1, levels = 2))
df %>% group_by(x, y) %>% summarise(n()
#> x y n
#> 1 1 1
#> 2 1 1
#> 1 1 0
#> 2 2 0
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЦрд╛рд▓реА рд╕рдореВрд╣реЛрдВ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рдХреЗрд╡рд▓ рдПрдХ рдЪрд░ рджреНрд╡рд╛рд░рд╛ рд╕рдореВрд╣рд┐рдд рдХрд░рддреЗ рд╕рдордп рд╣реА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ? рдпрджрд┐ рд╣рдо рдЗрд╕реЗ рдЕрдзрд┐рдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░реВрдк рд╕реЗ рдлреНрд░реЗрдо рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП data_frame(age_group = c(40, 60), sex = factor(M, levels = c("F", "M"))
рдХреНрдпрд╛ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рд┐рд▓рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЧрд┐рдирддреА рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрднреА-рдХрднреА рдЖрдк рдХрд░реЗрдВрдЧреЗ рдФрд░ рдХрднреА-рдХрднреА рдЖрдк рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рд╕рднреА рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдХреБрдЫ рдЕрд▓рдЧ рдСрдкрд░реЗрд╢рди рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ (рдФрд░ рдХрд╛рд░рдХреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░)ред
рд╢рд╛рдпрдж group_by
рдХреЛ drop
рдФрд░ expand
рддрд░реНрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? drop = FALSE
рдбреЗрдЯрд╛ рдореЗрдВ рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░рдХ рд╕реНрддрд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╕рднреА рдЖрдХрд╛рд░ рд╢реВрдиреНрдп рд╕рдореВрд╣реЛрдВ рдХреЛ рд░рдЦреЗрдЧрд╛ред expand = TRUE
рдбреЗрдЯрд╛ рдореЗрдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдорд╛рдиреЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рд╕реЗ рдЙрддреНрдкрдиреНрди рд╕рднреА рдЖрдХрд╛рд░ рдХреЗ рд╢реВрдиреНрдп рд╕рдореВрд╣реЛрдВ рдХреЛ рд░рдЦреЗрдЧрд╛ред
@ рд╣реИрдбрд▓реА рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореБрдЭреЗ рд╕рд╣реА рд▓рдЧрддреЗ рд╣реИрдВ (рдорд╛рди levels = 1:2
, рди рдХрд┐ levels = 2
)ред рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдИ рдЪрд░ рджреНрд╡рд╛рд░рд╛ рд╕рдореВрд╣рдмрджреНрдз рдХрд░рддреЗ рд╕рдордп рднреА рдЦрд╛рд▓реА рд╕рдореВрд╣реЛрдВ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЪрд░ sex
( male
рдФрд░ female
) рдФрд░ answer
(рдкреНрд░рд╢реНрдирд╛рд╡рд▓реА рдкрд░, рд╕реНрддрд░реЛрдВ рдХреЗ рд╕рд╛рде disagree
, neutral
, agree
), рдФрд░ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдЙрддреНрддрд░ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП, рдпрд╛ рдмрд╛рдж рдореЗрдВ рдкреНрд▓реЙрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП), рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рдЙрддреНрддрд░ рд╢реНрд░реЗрдгреА рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣реЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рдорд╣рд┐рд▓рд╛ рдиреЗ рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рдирд╣реАрдВ рджрд┐рдпрд╛ред
рдореИрдВ рдкрд░рд┐рдгрд╛рдореА data_frame
(рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ) рдФрд░ _рдореВрд▓ рд╕реНрддрд░реЛрдВ_ рдХреЗ рд╕рд╛рде рдХрд╛рд░рдХ рдЪрд░ рдХреЗ рдХрд╛рд░рдХ рдЪрд░ рдмрдиреЗ рд░рд╣рдиреЗ рдХреА рднреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реВрдВред (рдЗрд╕рд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд▓реЙрдЯ рдХрд░рддреЗ рд╕рдордп, рдЙрддреНрддрд░ рд╢реНрд░реЗрдгрд┐рдпрд╛рдВ рд╕рд╣реА рдХреНрд░рдо рдореЗрдВ рд╣реЛрдВрдЧреА, рди рдХрд┐ рд╡рд░реНрдгрдорд╛рд▓рд╛ agree
, disagree
, neutral
)ред
рдЖрдкрдХреЗ рдЕрдВрддрд┐рдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, _рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ_ sex
рдЪрд░ рдХреЛ рдЧрд┐рд░рд╛рдирд╛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реЛрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ _рдЬрд╛рдирдмреВрдЭрдХрд░_ рдХрд┐рд╕реА рдорд╣рд┐рд▓рд╛ рдХрд╛ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛), рдФрд░ _рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ_ рдирд╣реАрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрддрд░реАрдХреГрдд рдЬрдиреНрдо рджреЛрд╖реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╕рдордп) рд▓рд┐рдВрдЧ (рдФрд░ рд╢рд╛рдпрдж рд╡рд░реНрд╖))ред рд▓реЗрдХрд┐рди рдпрд╣ (рдФрд░ рдЪрд╛рд╣рд┐рдП) рдЖрд╕рд╛рдиреА рд╕реЗ _after_ рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдирд┐рдкрдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред (рдПрдХ рдЕрд▓рдЧ рд╕рдорд╛рдзрд╛рди _vector-valued_ .drop
рддрд░реНрдХ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЪреАрдЬреЛрдВ рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?)
(рдПрдХ рдЕрд▓рдЧ рд╕рдорд╛рдзрд╛рди рд╡реЗрдХреНрдЯрд░-рдореВрд▓реНрдпрд╡рд╛рди .drop рддрд░реНрдХ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЪреАрдЬреЛрдВ рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?)
рд╣рд╛рдБ, рд╢рд╛рдпрдж рдмрд╣реБрдд рдЬрдЯрд┐рд▓ред рдЕрдиреНрдпрдерд╛ рдореИрдВ @huftis рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред
@ рд╣реИрдбрд▓реА
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ
рд╣рд╛рдБ рдорд╛рдиреЛрдВ рдХреЗ рд╕рднреА рд╕рдВрдпреЛрдЬрдиреЛрдВ рдкрд░ рд╕рдореВрд╣_рдмреА рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ рдпрджрд┐ рд╡реЗ рдбреЗрдЯрд╛ рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВред
NO рдЙрди рдХрд╛рд░рдХ рд╕реНрддрд░реЛрдВ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рди рдХрд░реЗрдВ рдЬреЛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВред
рдореЗрд░рд╛ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдорд╛рдорд▓рд╛ рдЪрд╛рд░реНрдЯ рдХреЗ рд▓рд┐рдП рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рд╕реЗрдЯ рддреИрдпрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ (рдЕрдиреНрд╡реЗрд╖рдг рдХреЗ рджреМрд░рд╛рди)ред рдФрд░ рдЪрд╛рд░реНрдЯ рдореЗрдВ рдорд╛рдиреЛрдВ рдХреЗ рд╕рднреА рд╕рдВрдпреЛрдЬрди рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рд╕рднреА рд╕рдореВрд╣реЛрдВ рдХреЗ рд▓рд┐рдП 0 рд╡рд╛рд▓реЗ рдХрд╛рд░рдХ рд╕реНрддрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ .. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдмрд╛рд░ рдЪрд╛рд░реНрдЯ рдХреЛ рд╕реНрдЯреИрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдРрд╕реЗ рдХрд╛рд░рдХ рдорд╛рдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВ, рдпреЗ рдХреЗрд╡рд▓ 0 рд╣реЛрдВрдЧреЗ рдЬрдм рд╕реНрдЯреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдХрд┐рдВрд╡рджрдВрддреА рдореЗрдВ рдПрдХ рдЦрд╛рд▓реА рдорд╛рди рд╣реЛрдЧрд╛ред
рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рд╕рдореВрд╣_рдмреА рдореЗрдВ рд╕рднреА рдорд╛рдиреЛрдВ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рд╕рдореВрд╣ рдХреЗ рдмрд╛рдж 0 рдорд╛рдорд▓реЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди (рдФрд░ рдЕрдзрд┐рдХ рд╕рд╣рдЬ) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ .рдбреНрд░реЙрдк рддрд░реНрдХ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ 0 рдорд╛рдорд▓реЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред рд╣рдо рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдореЛрд▓реНрдб рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗрд╡рд▓ group_by рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореМрдЬреВрджрд╛ рдорд╛рдиреЛрдВ рдХреЗ рд╕рднреА рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣реА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдВ рдЕрджреНрд╡рд┐рддреАрдп рдХреЗрд╡рд▓ рдХрд╛рд░рдХ рдореЗрдВ рдореМрдЬреВрджрд╛ рдореВрд▓реНрдпреЛрдВ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдЧрд╛, рд╕рднреА рдХрд╛рд░рдХ рд╕реНрддрд░реЛрдВ рдкрд░ рдирд╣реАрдВред (рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдореИрдВ рд╕рдореВрд╣_рдмреА рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рдЬреЛ 0 рдорд╛рди рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ)
## Expand data so plot groups works correctly
df2 <- expand.grid(name = unique(df$name), group = unique(df$group)) %>%
left_join(df, by=c("name","group")) %>%
mutate(
measure = ifelse(is.na(measure),0,measure)
)
рдПрдХрдорд╛рддреНрд░ рдорд╛рдорд▓рд╛ рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдПрдХ рдореВрд▓реНрдп рдХрд╣рд╛рдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рд╕рднреА рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╢реВрдиреНрдп рд╕рдордп рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╣реЛред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдмреАрдЪ рдореЗрдВ рдХрд╣реАрдВ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рджрд┐рди рдЧрд╛рдпрдм рд╣реЛред рдпрд╣рд╛рдВ рдПрдХ рддрд┐рдерд┐ рд╕реАрдорд╛ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдФрд░ рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдЕрднреА рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ред рдХрд╛рд░рдХ рд╕реНрддрд░ рдХрд╛ рдорд╛рдорд▓рд╛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХреНрд░рдВрдЪрд░ рдХреЗ рд▓рд┐рдП рд▓рд╛рдкрддрд╛ рддрд┐рдерд┐рдпреЛрдВ рдХреЛ рд╕реНрд╡рдпрдВ рд╣реА рд╕рдВрднрд╛рд▓рдирд╛ рдЙрдЪрд┐рдд рд╣реИред
рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░ рдЖрдкрдХреЗ рд╕рднреА рдорд╣рд╛рди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореЗрд░реА рдиреМрдХрд░реА рдХрд╛ 90% dplyr рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред : )
рдореИрдВ @huftis рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рд╣реВрдВред
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╕реНрддрд░реЛрдВ рдХреЗ рдЧрд┐рд░рдиреЗ рдпрд╛ рд╕реНрддрд░реЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХрд╛ рдбреЗрдЯрд╛ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдирдореВрдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдЖрдХреГрддрд┐ рдХрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдмрдирд╛ рд░рд╣реЗ рд╣реЛрдВред рдпрд╛ рд╕реНрдкреНрд▓рд┐рдЯ-рдЕрдкреНрд▓рд╛рдИ-рдХрдореНрдмрд╛рдЗрди рдСрдкрд░реЗрд╢рди рдХрд░рддреЗ рд╣реБрдП, рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдк рдПрдХ рдЧрд╛рд░рдВрдЯреА рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╕рдореВрд╣ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдмрд╛рдХреА рд╕рднреА рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛ред
рдореЗрд░реА рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд░рдо рдХрд░рдирд╛: рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рднрд┐рдиреНрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рд╕рдореВрд╣ рдЪрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЙрдЪрд┐рдд рдХрд╛рд░рдХ рд╣реИ рдмрдирд╛рдо рдЬрдм рдЗрд╕реЗ рдХрд╛рд░рдХ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реЛред рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЬрдмрд░рджрд╕реНрддреА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдкреНрд░рдпреБрдХреНрдд рд╕реНрддрд░реЛрдВ рдХреЛ рд░рдЦрдиреЗ рдХреА рдмрд╛рдзреНрдпрддрд╛ рдХрдо рд╣реЛ рд╕рдХрддреА рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рдПрдХ рдХрд╛рд░рдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕реНрддрд░реЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрд╕реАрдмрдд рдореЗрдВ рдкрдбрд╝ рдЧрдпрд╛ рд╣реВрдБ ... рддреЛ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрд╛рддрд╛рд░ рд╕рдВрдШрд░реНрд╖ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред
FYIW, рдореИрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рднреА рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдорд╛рди рдкрд░рд┐рджреГрд╢реНрдп рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ @huftis рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рд╣реИ рдФрд░ рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдкреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреВрджрдирд╛ рд╣реИред
рдПрд╕рдУ рд╕реЗ рдпрд╣рд╛рдВ рдЖрдпрд╛ рдерд╛ред рдХреНрдпрд╛ рдпрд╣ "tidyr" рд╕реЗ complete
рдорджрдж рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реИ?
рд╣рд╛рдБ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИред рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ 'рдкреВрд░реНрдг' рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрд╛ рд╣реИ рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдПрдХ рд╡рд┐рдЪрд╛рд░рд╢реАрд▓ рддрд░реАрдХреЗ рд╕реЗ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
SQL рдмреИрдХрдПрдВрдб рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рднреА рд╕рдореВрд╣реЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗред рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдЙрд╕ рдкрд░ рдЫреЛрдбрд╝ рджреЗрдВ рдФрд░ рд╢рд╛рдпрдж SQL рдХреЗ рд▓рд┐рдП tidyr::complete() рд▓рд╛рдЧреВ рдХрд░реЗрдВ?
рдореИрдВрдиреЗ рдореБрджреНрджрд╛ # 3033 рдмрдирд╛рдпрд╛ рд╣реИ, рдпрд╣ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ - рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред рдЕрдкрдирд╛ рд╡рд┐рдирдореНрд░ рд╕реБрдЭрд╛рд╡ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ pull()
рдФрд░ forcats::fct_count()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ
рдореИрдВ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ fct_count()
рдПрдХ рдЖрдЙрдЯрдкреБрдЯ рдмрдирд╛рдиреЗ рдХреЗ tidyverse рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдзреЛрдЦрд╛ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрд╢рд╛ рдЗрдирдкреБрдЯ рдХреЗ рд╕рдорд╛рди рдкреНрд░рдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИ (рдпрд╛рдиреА рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╡реЗрдХреНрдЯрд░ рд╕реЗ рдПрдХ рдЯрд┐рдмрд▓ рдмрдирд╛рддрд╛ рд╣реИ), рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рд╣реИ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдХреЙрд▓рдо рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣ 3 рдЪрд░рдг рдмрдирд╛рддрд╛ рд╣реИ ( pull() %>% fct_count() %>% rename()
) рдЬрдм dplyr::count()
рдПрдХ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛ред рдпрд╣ рд╢рд╛рдирджрд╛рд░ рд╣реЛрдЧрд╛ рдпрджрд┐ forcats::fct_count()
рдФрд░ dplyr::count()
рдХреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рдореЗрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ forcats::fct_count()
рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдХреНрдпрд╛ tidyr::complete()
рдХрд╛рд░рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
рдХрд╛рд░рдХ рд╕реНрддрд░реЛрдВ рдХреЗ рд╕рднреА рдХрд╛рд░рдХ рд╕реНрддрд░реЛрдВ рдФрд░ рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ drop
, expand
, рдЖрджрд┐ рдЬреИрд╕реЗ рдорд╛рдкрджрдВрдбреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ dplyr::count()
рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдЗрд╕ рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
df <- data.frame(x = 1:2, y = factor(c(1, 1), levels = 1:2))
df %>% dplyr::count(x, y)
#> # A tibble: 4 x 3
#> x y n
#> <int> <fct> <int>
#> 1 1 1 1
#> 2 2 1 1
#> 3 1 2 0
#> 4 2 2 0
рд╢реВрдиреНрдп рд▓рдВрдмрд╛рдИ рд╕рдореВрд╣ (рд╕рдореВрд╣реЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди) рдХреЛ рдмрд╛рдж рдореЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЦреЛрдЬрдкреВрд░реНрдг рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдкреВрд░реА рддрд╕реНрд╡реАрд░ рджреЗрдЦрдиреА рд╣реЛрдЧреАред
2: рд╣рд╛рдБ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ
1: рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рддрдХрдиреАрдХреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрдард┐рдирд╛рдЗрдпрд╛рдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдЕрдЧрд▓реЗ рдХреБрдЫ рд╣рдлреНрддреЛрдВ рдореЗрдВ рджреЗрдЦреВрдВрдЧрд╛ред
рддрдереНрдп рдХреЗ рдмрд╛рдж рдбреЗрдЯрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдХреЗ рд╣рдо рдЗрд╕рд╕реЗ рджреВрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдРрд╕рд╛ рдХреБрдЫ:
library(tidyverse)
truly_group_by <- function(data, ...){
dots <- quos(...)
data <- group_by( data, !!!dots )
labels <- attr( data, "labels" )
labnames <- names(labels)
labels <- mutate( labels, ..index.. = attr(data, "indices") )
expanded <- labels %>%
tidyr::expand( !!!dots ) %>%
left_join( labels, by = labnames ) %>%
mutate( ..index.. = map(..index.., ~if(is.null(.x)) integer() else .x ) )
indices <- pull( expanded, ..index..)
group_sizes <- map_int( indices, length)
labels <- select( expanded, -..index..)
attr(data, "labels") <- labels
attr(data, "indices") <- indices
attr(data, "group_sizes") <- group_sizes
data
}
df <- data_frame(
x = 1:2,
y = factor(c(1, 1), levels = 1:2)
)
tally( truly_group_by(df, x, y) )
#> # A tibble: 4 x 3
#> # Groups: x [?]
#> x y n
#> <int> <fct> <int>
#> 1 1 1 1
#> 2 1 2 0
#> 3 2 1 1
#> 4 2 2 0
tally( truly_group_by(df, y, x) )
#> # A tibble: 4 x 3
#> # Groups: y [?]
#> y x n
#> <fct> <int> <int>
#> 1 1 1 1
#> 2 1 2 1
#> 3 2 1 0
#> 4 2 2 0
рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рд╛рдЗрди рдХреЗ рдиреАрдЪреЗ, рдЗрд╕реЗ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рдПрдЧрд╛, рдмрд┐рдирд╛ tidyr рдпрд╛ purrr рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореВрд▓ рдкреНрд░рд╢реНрди рдХрд╛ рдЦреНрдпрд╛рд▓ рд░рдЦрдирд╛ рд╣реИ:
> df = data.frame(a=rep(1:3,4), b=rep(1:2,6))
> df$b = factor(df$b, levels=1:3)
> df %>%
+ group_by(b) %>%
+ summarise(count_a=length(a), .drop=FALSE)
# A tibble: 2 x 3
b count_a .drop
<fct> <int> <lgl>
1 1 6 FALSE
2 2 6 FALSE
> df %>%
+ truly_group_by(b) %>%
+ summarise(count_a=length(a), .drop=FALSE)
# A tibble: 3 x 3
b count_a .drop
<fct> <int> <lgl>
1 1 6 FALSE
2 2 6 FALSE
3 3 0 FALSE
рдпрд╣рд╛рдБ рдХреБрдВрдЬреА рдпрд╣ рд╣реИ
tidyr::expand( !!!dots ) %>%
рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рд╕рднреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛, рднрд▓реЗ рд╣реА рдЪрд░ рдХрд╛рд░рдХ рд╣реЛрдВ рдпрд╛ рди рд╣реЛрдВред
рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд╣рдо рдпрд╛ рддреЛ:
drop=FALSE
, рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ 0 рд▓рдВрдмрд╛рдИ рд╕рдореВрд╣ рд╣реЛрдВdrop=TRUE
рд╢рд╛рдпрдж рдбреНрд░реЙрдкрдиреЗрд╕ рдХреЛ рдЯреЙрдЧрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИред
рдпрд╣ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд╕реНрддрд╛ рдСрдкрд░реЗрд╢рди рд╣реИ рдЬреЛ рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рдкрд╣рд▓реЗ рдЖрд░ рдореЗрдВ рдРрд╕рд╛ рдХрд░рдирд╛ рдХрдо рдЬреЛрдЦрд┐рдо рднрд░рд╛ рд╣реИ?
рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм crossing()
рдмрдЬрд╛рдп expand()
?
рдЗрдВрдЯрд░реНрдирд▓ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдХреНрдпрд╛ рдЖрдк рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ "рдХреЗрд╡рд▓" build_index_cpp()
, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ labels
рдбреЗрдЯрд╛ рдлреНрд░реЗрдо рдХреА рдкреАрдврд╝реА рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
рдХреНрдпрд╛ рд╣рдо рд╢рд╛рдпрдж drop = FALSE
рд╕рд╛рде рдХреЗрд╡рд▓ рдХрд╛рд░рдХреЛрдВ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВрдиреЗ рдПрдХ "рдкреНрд░рд╛рдХреГрддрд┐рдХ" рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдорд╛рдирд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдВрдд рдореЗрдВ рдмрд╣реБрдд рднреНрд░рдорд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдФрд░ рд╢рд╛рдпрдж рдкрд░реНрдпрд╛рдкреНрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рднреА рдирд╣реАрдВ):
group_by(data, crossing(col1, col2), col3)
рд╕рд┐рдореЗрдВрдЯрд┐рдХреНрд╕: col1
рдФрд░ col2
рд╕рднреА рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдФрд░ col3
рд╕рд╛рде рдореМрдЬреВрджрд╛ рд╕рдВрдпреЛрдЬрди рд╣реИрдВред
рд╣рд╛рдВ, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ build_index_cpp
рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдкреАрдврд╝реА рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ labels
, indices
рдФрд░ group_sizes
рдЬрд┐рд╕реЗ рдореИрдВ рдПрдХ рдореЗрдВ рд╕реНрдХреНрд╡реИрд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ #3489 . рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╕рдВрд░рдЪрдирд╛
рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХрд╛ "рдХреЗрд╡рд▓ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░рдХ" рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдЗрддрдирд╛ рд╕рдордп рд▓рдЧрд╛ред
рдЗрдирдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рд╣реЛрдВрдЧреЗ:
library(dplyr)
d <- data_frame(
f1 = factor( rep( c("a", "b"), each = 4 ), levels = c("a", "b", "c") ),
f2 = factor( rep( c("d", "e", "f", "g"), each = 2 ), levels = c("d", "e", "f", "g", "h") ),
x = 1:8,
y = rep( 1:4, each = 2)
)
f <- function(data, ...){
group_by(data, !!!quos(...)) %>%
tally()
}
f(d, f1, f2, x)
f(d, x, f1, f2)
f(d, f1, f2, x, y)
f(d, x, f1, f2, y)
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ f(d, f1, f2, x)
рдХреЛ f(d, x, f1, f2)
рдХреЗ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрджрд┐ рдкрдВрдХреНрддрд┐ рдХреНрд░рдо рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмрд╛рдХреА рджреЛ рдХреЗ рд▓рд┐рдП рднреА рд╕рдорд╛рдиред
рдпрд╣ рднреА рджрд┐рд▓рдЪрд╕реНрдк:
f(d, f2, x, f1, y)
d %>% sample_frac(0.3) %>% f(...)
рдореБрдЭреЗ рдХреЗрд╡рд▓ рдХрд╛рд░рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд╡рд┐рд╕реНрддрд╛рд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИред рдЧреИрд░-рдЪрд░рд┐рддреНрд░ рдбреЗрдЯрд╛ (рддрд╛рд░реНрдХрд┐рдХ рд╕рд╣рд┐рдд) рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдХрд╛рд░рдХ-рд╕рдорд╛рди рд╡рд░реНрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд/рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рд╢рд╛рдпрдж forcats рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛
#3492 . рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рдЧрддрд┐ рдкрд░ рд╣реИ
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
df <- data_frame( f = factor( c(1,1,2,2), levels = 1:3), x = c(1,2,1,4) )
( res1 <- tally(group_by(df,f,x, drop = FALSE)) )
#> # A tibble: 9 x 3
#> # Groups: f [?]
#> f x n
#> <fct> <dbl> <int>
#> 1 1 1. 1
#> 2 1 2. 1
#> 3 1 4. 0
#> 4 2 1. 1
#> 5 2 2. 0
#> 6 2 4. 1
#> 7 3 1. 0
#> 8 3 2. 0
#> 9 3 4. 0
( res2 <- tally(group_by(df,x,f, drop = FALSE)) )
#> # A tibble: 9 x 3
#> # Groups: x [?]
#> x f n
#> <dbl> <fct> <int>
#> 1 1. 1 1
#> 2 1. 2 1
#> 3 1. 3 0
#> 4 2. 1 1
#> 5 2. 2 0
#> 6 2. 3 0
#> 7 4. 1 0
#> 8 4. 2 1
#> 9 4. 3 0
all.equal( res1, arrange(res2, f, x) )
#> [1] TRUE
all.equal( filter(res1, n>0), tally(group_by(df, f, x)) )
#> [1] TRUE
all.equal( filter(res2, n>0), tally(group_by(df, x, f)) )
#> [1] TRUE
рдЬреИрд╕реЗ рдХрд┐ complete()
рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ - рдирд╣реАрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВред рдЬреЛ рднреА рд╕рд╛рд░рд╛рдВрд╢ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ, рдЦрд╛рд▓реА рд╡реИрдХреНрдЯрд░ рдкрд░ рдЙрдирдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рди рдХрд┐ рддрдереНрдп рдХреЗ рдмрд╛рдж рдкреИрдЪ рдЕрдк рдХрд░рдиреЗ рдХреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
data.frame(x=factor(1, levels=1:2), y=4:5) %>%
group_by(x) %>%
summarize(min=min(y), sum=sum(y), prod=prod(y))
# Should be:
#> x min sum prod
#> 1 4 9 20
#> 2 Inf 0 1
sum
рдФрд░ prod
(рдФрд░ рдХреБрдЫ рд╣рдж рддрдХ, min
) (рдФрд░ рдХрдИ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ) рдореЗрдВ рдЦрд╛рд▓реА рд╡реИрдХреНрдЯрд░ рдкрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╢рдмреНрджрд╛рд░реНрде рд╣реИрдВ, рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ рдмрд╛рдж рдореЗрдВ complete()
рд╕рд╛рде рдЖрдПрдВ рдФрд░ рдЙрди рд╡реНрдпрд╡рд╣рд╛рд░реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред
@kenahoo рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╡рд░реНрддрдорд╛рди рджреЗрд╡ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдорд┐рд▓рддрд╛ рд╣реИред рддреЛ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдЖрдкрдХреЛ рдирд╣реАрдВ рдорд┐рд▓рддреА рд╡рд╣ рд╣реИ min()
рд╕реЗ рдЪреЗрддрд╛рд╡рдиреА
library(dplyr)
data.frame(x=factor(1, levels=1:2), y=4:5) %>%
group_by(x) %>%
summarize(min=min(y), sum=sum(y), prod=prod(y))
#> # A tibble: 2 x 4
#> x min sum prod
#> <fct> <dbl> <int> <dbl>
#> 1 1 4 9 20
#> 2 2 Inf 0 1
min(integer())
#> Warning in min(integer()): no non-missing arguments to min; returning Inf
#> [1] Inf
sum(integer())
#> [1] 0
prod(integer())
#> [1] 1
@romainfrancois рдУрд╣ рдХреВрд▓, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдЖрдк рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рджреВрд░ рдереЗред рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ!
рдпрд╣ рдкреБрд░рд╛рдирд╛ рдЗрд╢реНрдпреВ рдЕрдкрдиреЗ рдЖрдк рд▓реЙрдХ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХреЛрдИ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реА рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ (рд░реЗрдкреНрд░реЗрдХреНрд╕ рдХреЗ рд╕рд╛рде) рджрд░реНрдЬ рдХрд░реЗрдВ рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВред https://reprex.tidyverse.org/
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
+1 - рдпрд╣ рдХрдИ рд╡рд┐рд╢реНрд▓реЗрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреАрд▓-рдмреНрд░реЗрдХрд░ рд╣реИ