Re: [問題] 依照條件,計算欄位,合併欄位

看板R_Language作者 (天)時間10年前 (2015/11/05 12:14), 10年前編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
直接用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://www.ptt.cc/bbs/R_Language/M.1446696858.A.705.html ※ 編輯: celestialgod (140.109.73.190), 11/05/2015 12:24:36

11/05 12:34, , 1F
謝謝斜對面的大大!!
11/05 12:34, 1F
文章代碼(AID): #1MEjUQS5 (R_Language)
文章代碼(AID): #1MEjUQS5 (R_Language)