Data.table: [R- рдлреЛрд░реНрдЬ # 5222] 'рдирд╣реАрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛' рдЬрдм DT [, рд╕реВрдЪреА (рдпреЛрдЧ (рдЧреИрд░-.SD-col), lapply (.SD, mean)), = =, .SDcols = ...] рджреНрд╡рд╛рд░рд╛ред

рдХреЛ рдирд┐рд░реНрдорд┐рдд 8 рдЬреВрди 2014  ┬╖  12рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Rdatatable/data.table

рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддреБрдд: рдореИрдЯ рд╡реЗрд▓рд░; рд╕реМрдВрдкрд╛ рдЧрдпрд╛: рдХреЛрдИ рднреА рдирд╣реАрдВ; рдЖрд░-рдлреЛрд░реНрдЬ рд▓рд┐рдВрдХ

.SDcols рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп (рдХрдИ рдХреЙрд▓рдореЛрдВ рдореЗрдВ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ) рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореВрд▓ рддрд╛рд▓рд┐рдХрд╛ (v1) рдореЗрдВ рдЕрдиреНрдп рд╕реНрддрдВрднреЛрдВ рдХрд╛ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛:

dt = data.table(grp=c(2,3,3,1,1,2,3), v1=1:7, v2=7:1, v3=10:16)
dt.out = dt[, c(v1 = sum(v1),  lapply(.SD,mean)), by = grp, .SDcols = v2:v3]
# Error in `[.data.table`(dt, , list(v1 = sum(v1), lapply(.SD, mean)), by = grp,  : 
#   object 'v1' not found

рдПрдХ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдореИрдВ рд╕реВрдЪреА рдХреЗ рдмрдЬрд╛рдп c рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреЙрд▓рдо v1 рдХреЛ j рдХреНрд▓реЙрдЬ рдХреЗ рднреАрддрд░ рдПрдХреНрд╕реЗрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдирд┐рдореНрди рдХреЛрдб рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓рд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдХреЙрд▓рдо v1 рд╢рд╛рдорд┐рд▓ рд╣реИ, рднрд▓реЗ рд╣реА рдореИрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдХрд┐ рдЗрд╕реЗ lapply рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдкрд░рд┐рдХрд▓рди рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдЧрд┐рд░рд╛рдирд╛ рд╣реЛрдЧрд╛ред

sd.cols = c("v1","v2", "v3")
dt.out = dt[, c(sum.v1 = sum(v1), lapply(.SD,mean)), by = grp, .SDcols = sd.cols]

Stackoverflow рдкрд░ eddi рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ рдФрд░ рдЙрд╕рдиреЗ рдореБрдЭреЗ рдЗрд╕рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рд╣реИред рдореИрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдмрд┐рд▓реНрдХреБрд▓ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЙрд╕реЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрдЧ рдерд╛, рдЕрд░реБрдг рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЧрдП рдЙрддреНрддрд░ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдФрд░ рдЙрдирдХреА рдЖрдЧрд╛рдореА рдЪрд░реНрдЪрд╛ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдпрд╣рд╛рдБ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдПрд╕рдУ рдкрдж рд╣реИред

рд╕рднреА 12 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдкреЛрд╕реНрдЯ: http://stackoverflow.com/questions/27755518/data-table-sd-lapply-multiple-columns-in-argument

рдереЛрдбрд╝рд╛ рджреЗрд░ рд╕реЗ, рд▓реЗрдХрд┐рди рдЗрд╕ рд╕рд╡рд╛рд▓ рдХреЛ рдвреЗрд░ рдореЗрдВ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВ

рдореИрдВрдиреЗ рдЗрд╕реЗ рдмрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛, рдЖрдорддреМрд░ рдкрд░ рдореИрдВ .SDcols рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдмрд╛рдж рдореЗрдВ j рдореИрдВ рдЕрд╡рд╛рдВрдЫрд┐рдд рдХреЙрд▓рдо рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП .SD[, !"total", with=FALSE] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

рдпрд╣ рдПрдХ рдФрд░ рдЕрдЪреНрдЫрд╛ рдЙрдкрд╛рдп рд╣реИ, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ dt$total рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдЕрдВрддрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдФрд░ рд╣рд╛рдВ, рдЗрд╕ рддрд░рд╣ рдХрд╛ FR рдФрд░ рдмрдЧ, IMO рдХреЗ рдмреАрдЪ рдХреА рд░реЗрдЦрд╛ рдХреЛ рдиреГрддреНрдп рдХрд░рддрд╛ рд╣реИред

рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЙрдЫрд╛рд▓рдирд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реБрдзрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рд╢реНрди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╕рдВрднрд╡рддрдГ DT[, (deltaColsNewNames) := lapply(.SD, normalDelta, price), .SDcols = deltaColsNames] рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рдпрд╣рд╛рдВ рдПрдХ рдФрд░ рд╕рд░рд▓ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛: http://stackoverflow.com/a/32498711/1191259

рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рд╕рд░рд▓ рдорд╛рдорд▓рд╛ рд╣реИ рдЬреЛ рдЧреНрд░рд╕реНрдд рд╣реИ: http://stackoverflow.com/questions/32944060/use-data-table-to-calculate-new-columns/32944519#32944519

рддрдп рд╣реЛрдиреЗ рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░: http://stackoverflow.com/q/32915770/1191259

рд╡рд╛рд╣! рдЕрдм рд╣рдо рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

require(data.table)
dt = data.table(grp=c(2,3,3,1,1,2,3), v1=1:7, v2=7:1, v3=10:16)
dt.out = dt[, c(v1 = sum(v1),  lapply(.SD,mean)), by = grp, .SDcols = v2:v3]
  #  grp v1  v2   v3
# 1:   2  7 4.5 12.5
# 2:   3 12 4.0 13.0
# 3:   1  9 3.5 13.5

рдпрд╣рд╛рдВ рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рднреА SO рдкреЛрд╕реНрдЯ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдПред рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рджред

рдзрдиреНрдпрд╡рд╛рдж, @arunsrinivasan рдореИрдВ рдХреБрдЫ рд╕рд╛рд▓ рд╕реЗ рдЗрд╕ рдлрд┐рдХреНрд╕ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рдерд╛ред

рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рдзрдиреНрдпрд╡рд╛рдж

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

alex46015 picture alex46015  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

arunsrinivasan picture arunsrinivasan  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

nachti picture nachti  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sengoku93 picture sengoku93  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

pannnda picture pannnda  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ