作者celestialgod (天)
看板R_Language
标题Re: [问题] 依照条件,计算栏位,合并栏位
时间Thu Nov 5 12:14:15 2015
直接用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,你好你好
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.109.73.190
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1446696858.A.705.html
※ 编辑: celestialgod (140.109.73.190), 11/05/2015 12:24:36
1F:推 JJabrams: 谢谢斜对面的大大!! 11/05 12:34