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

作者: celestialgod (天)   2015-08-04 22:30:58
※ 引述《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
補充,你有兩個一樣大的最大值會有問題
那時候要怎麼解決就看資料使用人要怎麼改.... 這部分空間比較大
作者: gbd37 (我想抓波波)   2015-08-04 22:33:00
已跪
作者: Wush978 (拒看低質媒體)   2015-08-04 22:40:00
跟著跪
作者: squallscer (羽毛)   2015-08-04 22:40:00
在跟著跪
作者: andrew43 (討厭有好心推文後刪文者)   2015-08-05 00:50:00
不准跪,那我倒立可以嗎?
作者: cywhale (cywhale)   2015-08-05 09:01:00
推推推 NA_character_學起來~~~
作者: allen1985 (我要低調 拯救形象)   2015-08-05 11:49:00
太強大了
作者: psinqoo (零度空間)   2015-08-05 13:18:00
後空翻了

Links booklink

Contact Us: admin [ a t ] ucptt.com