Re: [問題] 處理資料問題(pkg:dplyr)

作者: psinqoo (零度空間)   2015-08-06 13:08:36
延伸問題
正被搞暈中
RAW DATA長這樣
ID 地點 日期 性別
A TAI 2012 F
A JP 2013 F
A CH 2014 F
A KOE 2011 F
B JP 2011 M
B GOK 2015 M
B TA 2012 M
變成下面這樣
第一種 形式
ID 地點一 地點二 地點三 地點四 性別
A KOE TAI JP CH F
B JP TA GOK M
第二種
ID 2011 2012 2013 2014 2015 性別
A KOE TAI JP CH F
B JP TA GOK M
第三種
ID 地點 性別
A KO,TAI,JP,CH F
B JP,TA,GOK M
※ 引述《celestialgod (攸藍)》之銘言:
: ※ 引述《gbd37 (有夠瞎)》之銘言:
: : 軟體熟悉度:
: : 入門
: : [問題敘述]:
: : x是原data的型態
: : y是想用dplyr的套件去轉換成
: : Fro1是No.那欄出現最多次的字串且n1是出現幾次
: : Fro2是No.那欄出現第二多次的字串且n2是出現幾次
: : 我試著用group_by summarise count都試不成功
: : 抑或是也可以用別的套件來處理也OK 勞煩大大們指導
: : [程式範例]:
: : x <- data.frame(No.=c(rep('A01',3),rep('A02',3),rep('A03',3)),
: : Fro=c('TPE','KOA','KOA','TAI','TAI',
: : 'TAI','KOA','TPE','TPE'))
: : y <- data.frame(No.=c('A01','A02','A03'),Fro1=c('KOA','TAI','TPE'),
: : n1=c(2,3,2),Fro2=c('TPE','NA','KOA'),n2=c(1,'NA',1))
: : [關鍵字]:dplyr
: library(dplyr)
: # library(magrittr) # 可省略
: x <- data.frame(No=c(rep('A01',3),rep('A02',3),rep('A03',3)),
: Fro=c('TPE','KOA','KOA','TAI','TAI','TAI','KOA','TPE','TPE'),
: stringsAsFactors = FALSE)
: x %>% group_by(No, Fro) %>% summarise(nFro = n()) %>%
: summarise(Fro1 = Fro[which.max(nFro)], n1 = max(nFro),
: Fro2 = ifelse(n() > 1, Fro[order(nFro) == n()-1], NA_character_),
: n2 = ifelse(n() > 1, nFro[order(nFro) == n()-1], NA))
: 如果x的column是factor會有問題,這個你可以自己找出來
: 結果:
: No Fro1 n1 Fro2 n2
: 1 A01 KOA 2 TPE 1
: 2 A02 TAI 3 NA NA
: 3 A03 TPE 2 KOA 1
: 補充,你有兩個一樣大的最大值會有問題
: 那時候要怎麼解決就看資料使用人要怎麼改.... 這部分空間比較大

Links booklink

Contact Us: admin [ a t ] ucptt.com