Re: [問題] 資料整理問題
※ 引述《tony1331 (BLUE)》之銘言:
: [問題類型]:
: 我想用R 做某件事情,但是我不知道要怎麼用R 寫出來
: [軟體熟悉度]:
: 寫過程式,R 是我的第一次
: [問題敘述]:
: http://i.imgur.com/yKt85T3.jpg

: 目前只會單列unique,想把每列都unique~
: 懇請教導,感謝~
: 不好意思手機發文好像怪怪的
: -----
: Sent from JPTT on my Asus ASUS_Z012DA.
不用套件有點麻煩,懶得寫XD,下面是最簡單的作法:
# 好讀板:https://pastebin.com/67j92ptN
library(data.table)
library(pipeR)
# data generation
numRows <- 3e4
numCols <- 8
s <- matrix(NA_integer_, numRows, numCols)
idx <- sample(numCols, numRows, TRUE)
for (i in 1:numCols)
s[idx == i, 1:i] <- sample(42, i * sum(idx == i), TRUE)
time <- seq(ISOdate(2017, 9, 12) - numRows*3600, ISOdate(2017, 9, 12),
by = "hour")
DT <- data.table(time = head(time, numRows), s)
# time V1 V2 V3 V4 V5 V6 V7 V8
# 1: 2014-04-11 12:00:00 31 26 20 19 7 NA NA NA
# 2: 2014-04-11 13:00:00 4 5 4 4 7 NA NA NA
# 3: 2014-04-11 14:00:00 17 17 32 36 NA NA NA NA
# 4: 2014-04-11 15:00:00 2 23 25 28 41 14 32 10
# 5: 2014-04-11 16:00:00 40 33 25 27 29 NA NA NA
# ---
# 29996: 2017-09-12 07:00:00 36 13 7 38 21 34 36 NA
# 29997: 2017-09-12 08:00:00 18 NA NA NA NA NA NA NA
# 29998: 2017-09-12 09:00:00 8 9 35 32 12 18 3 NA
# 29999: 2017-09-12 10:00:00 41 10 22 32 28 39 17 31
# 30000: 2017-09-12 11:00:00 21 21 NA NA NA NA NA NA
# 主程式
# 第一個問題
st <- proc.time()
melt(DT, 1, 2:9) %>>% na.omit("value") %>>%
`[`(j = .(value = unique(value), idx = 1:uniqueN(value)), by = .(time)) %>>%
dcast(time ~ idx, value.var = "value")
proc.time() - st
# user system elapsed
# 0.68 0.00 0.71
# time 1 2 3 4 5 6 7 8
# 1: 2014-04-11 12:00:00 31 26 20 19 7 NA NA NA
# 2: 2014-04-11 13:00:00 4 5 7 NA NA NA NA NA
# 3: 2014-04-11 14:00:00 17 32 36 NA NA NA NA NA
# 4: 2014-04-11 15:00:00 2 23 25 28 41 14 32 10
# 5: 2014-04-11 16:00:00 40 33 25 27 29 NA NA NA
# ---
# 29996: 2017-09-12 07:00:00 36 13 7 38 21 34 NA NA
# 29997: 2017-09-12 08:00:00 18 NA NA NA NA NA NA NA
# 29998: 2017-09-12 09:00:00 8 9 35 32 12 18 3 NA
# 29999: 2017-09-12 10:00:00 41 10 22 32 28 39 17 31
# 30000: 2017-09-12 11:00:00 21 NA NA NA NA NA NA NA
# 第二個問題
st <- proc.time()
melt(DT, 1, 2:9) %>>% na.omit("value") %>>%
`[`(j = .(cnt = .N), by = .(time, value))
proc.time() - st
# user system elapsed
# 0.14 0.03 0.17
# time value cnt
# 1: 2014-04-11 12:00:00 31 1
# 2: 2014-04-11 13:00:00 4 3
# 3: 2014-04-11 14:00:00 17 2
# 4: 2014-04-11 15:00:00 2 1
# 5: 2014-04-11 16:00:00 40 1
# ---
# 128084: 2017-09-11 03:00:00 29 1
# 128085: 2017-09-11 16:00:00 6 1
# 128086: 2017-09-11 22:00:00 24 1
# 128087: 2017-09-12 05:00:00 4 1
# 128088: 2017-09-12 10:00:00 31 1
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.170.62.243
※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1505316129.A.087.html
推
09/14 11:35, , 1F
09/14 11:35, 1F
→
09/14 11:51, , 2F
09/14 11:51, 2F
→
09/14 11:51, , 3F
09/14 11:51, 3F
rownames這概念,我一直不覺得有什麼用... 我基本上也沒再用rownames
而且其實rownames in somehow也是一種變數,沒必要放到rownames去
推
09/14 19:38, , 4F
09/14 19:38, 4F
→
09/14 19:41, , 5F
09/14 19:41, 5F
→
09/14 19:42, , 6F
09/14 19:42, 6F
你用melt跟用dplyr+tidyr效果是一樣的,時間的話,我相信data.table還是會快一點
推
09/14 21:14, , 7F
09/14 21:14, 7F
→
09/14 21:14, , 8F
09/14 21:14, 8F
你少打了一個點....
※ 編輯: celestialgod (118.170.62.243), 09/14/2017 21:28:35
→
09/14 22:05, , 9F
09/14 22:05, 9F
→
09/14 22:16, , 10F
09/14 22:16, 10F
→
09/14 22:16, , 11F
09/14 22:16, 11F
討論串 (同標題文章)
R_Language 近期熱門文章
PTT數位生活區 即時熱門文章