直接用dplyr解决吧
可以参考z-4-14的资料整理套件系列文 或是在板上/dplyr
library(dplyr)
※ 引述《JJabrams (JJ)》之铭言:
: [问题叙述]:
: 请简略描述你所要做的事情,或是这个程式的目的
: 我在计算大量资料, 但是不知道如何使用
: 举例:
: S020 S025 A029 Freq
: 1 1995 8401995 0 863
: 3 1995 8401995 1 679
: 2 1999 8401999 99 456
: 4 1999 8401999 1 744
: 希望可以在A029旁边依照A029的值,增加他的权重ex
: (我不知道要怎么不用for循环的方式直接在column写function并增加字段)
: S020 S025 A029 Weight Freq
: 1 1995 8401995 0 0.5 863
: 3 1995 8401995 1 2 679
: 2 1999 8401999 99 0 456
: 4 1999 8401999 1 2 744
以下DT表示你该问题的资料,class建议用data.table,可以避免复制问题
DT %>% mutate(Weight = weight_cal_func(~~))
想要按照想要的顺序就自己调换一下
DT %>% mutate(Weight = weight_cal_func(~~)) %>%
select(S020, S025, A029, Weight, Freq)
或是
dt_names = names(DT)
dt_names = c(dt_names[1:3], "Weight", dt_names[4])
DT %>% mutate(Weight = weight_cal_func(~~)) %>%
select_(dots = dt_names)
: 然后希望可以计算 Weight * Freq的值
: (这个我知道可以用data table的 dt[,value:= Freq * Weight] 解)
: S020 S025 A029 Weight Freq Value
: 1 1995 8401995 0 0.5 863 431.5
: 3 1995 8401995 1 2 679 1358
: 2 1999 8401999 99 0 456 0
: 4 1999 8401999 1 2 744 1488
DT %>% mutate(Value = Freq * Weight)
: 最后依照 S020的年份作加总,并只选需要的字段
: S020 S025 Freq Value
: 1 1995 8401995 1542 1789.5
: 4 1999 8401999 1200 1488
DT %>% group_by(S020) %>% summarise(Freq = sum(Freq),
Value = sum(Value), S025 = unique(S025))
后记:
原来是斜对面的捧U阿XDD,你好你好