Re: [問題] 依照區間切割資料並計算個數
我忘記在哪學到下面這招的,剛剛要找都找不到相關的文章~"~
如果有誰還記得再麻煩告知我一下,謝謝。
19:34補充:
我找到了,是#1KzOu2X8 (R_Language),他用matrix去創資料的方式很特別XD
所以後來腦海中有這個印象,不過跟這篇無關拉,只是一個小技巧而已
library(data.table)
library(plyr)
library(dplyr)
library(magrittr)
DT = fread('
id date
1 1204
1 1205
1 1209
1 1210
1 1211
2 1201
2 1202
2 1205
2 1207
3 1204
3 1206', header = TRUE, colClasses = c('integer', 'character'))
DT %>% mutate(date2 = gsub('(\\d{2})(\\d{2})', '2015-\\1-\\2', date) %>%
as.Date) %>% group_by(id) %>% arrange(id, date2) %>%
mutate(diffDay = diff(c(date2[1]-2, date2))) %>% ungroup %>%
mutate(num = cumsum(ifelse(diffDay > 1, 1L, 0L))) %>% select(id, date, num)
# Source: local data table [11 x 3]
#
# id date num
# (int) (chr) (int)
# 1 1 1204 1
# 2 1 1205 1
# 3 1 1209 2
# 4 1 1210 2
# 5 1 1211 2
# 6 2 1201 3
# 7 2 1202 3
# 8 2 1205 4
# 9 2 1207 5
# 10 3 1204 6
# 11 3 1206 7
PS: 2015是隨便加的,有年放年,沒年資料隨便放一年
只要都在同一年就沒問題,出來的天數就不會有問題
※ 引述《tHEiPHoNe ( )》之銘言:
: 有一組消費者資料
: id date
: 1 1204
: 1 1205
: 1 1209
: 1 1210
: 1 1211
: 2 1201
: 2 1202
: 2 1205
: 2 1207
: 3 1204
: 3 1206
: 若同一user不間斷天數消費則計算為同一筆
: 不同user或是間斷消費天數則計入下一筆
: 如下
: id date num
: 1 1204 1
: 1 1205 1
: 1 1209 2
: 1 1210 2
: 1 1211 2
: 2 1201 3
: 2 1202 3
: 2 1205 4
: 2 1207 5
: 3 1204 6
: 3 1206 7
: 想請問有建議使用的function嗎?
: 謝謝
--
R資料整理套件系列文:
magrittr #1LhSWhpH (R_Language) http://tinyurl.com/1LhSWhpH
data.table #1LhW7Tvj (R_Language) http://tinyurl.com/1LhW7Tvj
dplyr(上) #1LhpJCfB (R_Language) http://tinyurl.com/1LhpJCfB
dplyr(下) #1Lhw8b-s (R_Language)
tidyr #1Liqls1R (R_Language) http://tinyurl.com/1Liqls1R
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.218.152.118
※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1452078719.A.79C.html
推
01/07 10:17, , 1F
01/07 10:17, 1F
推
01/07 12:33, , 2F
01/07 12:33, 2F
→
01/07 12:36, , 3F
01/07 12:36, 3F
推
01/07 12:42, , 4F
01/07 12:42, 4F
不太懂你為什麼會出現負數
http://i.imgur.com/Lc4ynDh.png

確實應該是2才是正常的
我無法確認為何你的程式跟我的程式結果不一樣
你是用同一個資料,結果不同,還是不同資料,結果不同?
DT(原始資料讀入後的data.table)的date是character還是integer都有可能造成問題...
這裡要注意的是date2的class一定要是date,不然會有一些問題產生就是。
推
01/07 13:12, , 5F
01/07 13:12, 5F

→
01/07 13:14, , 6F
01/07 13:14, 6F
→
01/07 13:16, , 7F
01/07 13:16, 7F
版本都跟我一樣,不過照理來說group_by後經過一個mutate
他的class應該會回到tbl_dt 而非grouped_dt
你的mutate看起來沒有吃到group_by
我猜你是不是library(plyr);library(dplyr) 順序弄反 mutate用到plyr的
一定要先library(plyr) 才能library(dplyr)
另外,問一下你的R版本? 我R版本還在3.2.2...
推
01/07 13:49, , 8F
01/07 13:49, 8F
恩恩,這種事情常常不小心發生,要小心一點XD
推
01/07 16:40, , 9F
01/07 16:40, 9F
我倒是滿少ungroup的,不過他這裡的錯誤是mask造成的(攤手
※ 編輯: celestialgod (140.109.74.87), 01/07/2016 16:41:56
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
R_Language 近期熱門文章
PTT數位生活區 即時熱門文章