рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддреБрдд: рдореИрдЯ рд╡реЗрд▓рд░; рд╕реМрдВрдкрд╛ рдЧрдпрд╛: рдХреЛрдИ рднреА рдирд╣реАрдВ; рдЖрд░-рдлреЛрд░реНрдЬ рд▓рд┐рдВрдХ
.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 рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ рдФрд░ рдЙрд╕рдиреЗ рдореБрдЭреЗ рдЗрд╕рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рд╣реИред рдореИрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдмрд┐рд▓реНрдХреБрд▓ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЙрд╕реЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрдЧ рдерд╛, рдЕрд░реБрдг рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЧрдП рдЙрддреНрддрд░ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдФрд░ рдЙрдирдХреА рдЖрдЧрд╛рдореА рдЪрд░реНрдЪрд╛ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдПрд╕рдУ рдкрдж рд╣реИред
рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдкреЛрд╕реНрдЯ: 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 рдореИрдВ рдХреБрдЫ рд╕рд╛рд▓ рд╕реЗ рдЗрд╕ рдлрд┐рдХреНрд╕ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рдерд╛ред
рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рдзрдиреНрдпрд╡рд╛рдж