精華區beta R_Language 關於我們 聯絡資訊
[問題類型]: 我想用R 做某件事情,但是我不知道要怎麼用R 寫出來 [軟體熟悉度]: 寫過程式,R 是我的第一次 [問題敘述]: http://i.imgur.com/yKt85T3.jpg 目前只會單列unique,想把每列都unique~ 懇請教導,感謝~ 不好意思手機發文好像怪怪的 ----- Sent from JPTT on my Asus ASUS_Z012DA. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.83.119.123 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1505305534.A.764.html ※ 編輯: tony1331 (111.83.119.123), 09/13/2017 20:59:48 ※ 編輯: tony1331 (111.83.119.123), 09/13/2017 21:00:10 ※ 編輯: tony1331 (111.83.119.123), 09/13/2017 21:00:46 ※ 編輯: tony1331 (111.83.119.123), 09/13/2017 21:01:57
clansoda: 這是一個dataframe? 為啥有的空格大有的空格小阿09/13 21:14
clansoda: 如果是dataframe 就把vector拉出來unique在assign回去09/13 21:14
clansoda: 第二個問題看不懂 unique完不就大家都一次09/13 21:15
tony1331: 第2個沒有unique過09/13 21:17
tony1331: 拉出來unique 可是我有1萬多列09/13 21:18
tony1331: 想說有沒有辦法直接每列unique09/13 21:19
※ 編輯: tony1331 (111.83.119.123), 09/13/2017 21:27:30
celestialgod: 看不太懂,每列組數不一是什麼意思 09/13 21:33
celestialgod: 你例子裡面每列都是6個英文字母阿 09/13 21:34
celestialgod: 我覺得你可以直接給一個程式碼可以產生你的資料 09/13 21:34
celestialgod: 而且到底是數字還是英文字母 09/13 21:35
celestialgod: 處理方式完全可以不一樣.... 09/13 21:35
celestialgod: 請具體呈現一下你的資料格式會比較好 09/13 21:36
clansoda: 感覺不是困難的問題 只是要有一個示範資料比較好解 09/13 21:51
clansoda: 格式要跟你真正的資料一樣 09/13 21:51
tony1331: 好的 我截個圖 09/13 21:56
※ 編輯: tony1331 (111.83.119.123), 09/13/2017 21:59:44 ※ 編輯: tony1331 (111.83.119.123), 09/13/2017 22:59:25 > -------------------------------------------------------------------------- < 作者: celestialgod (天) 看板: R_Language 標題: Re: [問題] 資料整理問題 時間: Wed Sep 13 20:43:02 2017 ※ 引述《tony1331 (BLUE)》之銘言: : [問題類型]: : 我想用R 做某件事情,但是我不知道要怎麼用R 寫出來 : [軟體熟悉度]: : S寫過程式,R 是我的第一次 : [問題敘述]: : 01:00 a s j e j e l d k : 02:00 d w e w g w : 03:00 l e f w e g : 04:00 e r s : .. : .. : .. : 一個data.frame 時間後面號碼,每列不一 : 有重複 : (1) 請問大家要怎麼讓每列的號碼沒有重附,用unique好像不行 不知道你怎麼存那些character,先假設你用字串把它們combine再一起 DF <- data.frame(time = c("01:00", "02:00", "03:00", "04:00", "05:00"), characters = c("asjejeldk", "dwewgw", "lefweg", "ers", "qaqasdfd"), stringsAsFactors = FALSE) transform(DF, characters = lapply(strsplit(characters, ""), unique)) # time characters # 1 01:00 a, s, j, e, l, d, k # 2 02:00 d, w, e, g # 3 03:00 l, e, f, w, g # 4 04:00 e, r, s # 5 05:00 q, a, s, d, f : (2) 有什麼方法讓a b c ...這些號碼可以整理成在哪個時間出現幾次 是unique後取? 這樣就是每個都一次阿,下面用沒unique方式做: DF3 <- transform(DF, characters = strsplit(characters, "")) DF4 <- data.frame(time = unlist(mapply(function(x, y) rep(x, length(y)), DF3$time, DF3$characters)), character = unlist(DF3$characters), stringsAsFactors = FALSE) aggregate(rep(1, nrow(DF4))~ character + time, DF4, length) # 前五筆 # character time rep(1, nrow(DF4)) # 1 a 01:00 1 # 2 d 01:00 1 # 3 e 01:00 2 # 4 j 01:00 2 # 5 k 01:00 1 : 懇請教導,感謝~ : ----- : Sent from JPTT on my Asus ASUS_Z012DA. 套件做法: library(data.table) library(pipeR) DT <- data.table(time = c("01:00", "02:00", "03:00", "04:00", "05:00"), characters = c("asjejeldk", "dwewgw", "lefweg", "ers", "qaqasdfd")) # 1. DT[ , .(character = unlist(tstrsplit(characters, ""))), by = .(time)][ , .(characters = paste(unique(character), collapse = "")), by = .(time)] # time characters # 1: 01:00 asjeldk # 2: 02:00 dweg # 3: 03:00 lefwg # 4: 04:00 ers # 5: 05:00 qasdf # 2. DT[ , .(character = unlist(tstrsplit(characters, ""))), by = .(time)][ , .(cnt = .N), by = .(time, character)] # time character cnt # 1: 01:00 a 1 # 2: 01:00 s 1 # 3: 01:00 j 2 # 4: 01:00 e 2 # 5: 01:00 l 1 -- -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.170.62.243 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1505306585.A.FCC.html ※ 編輯: celestialgod (118.170.62.243), 09/13/2017 20:43:36
tony1331: 不好意思 我表達有問題 讓您誤會了 我改一下~ 09/13 20:54
tony1331: c大 我改了 麻煩在給與教導,謝謝 09/13 21:03
> -------------------------------------------------------------------------- < 作者: celestialgod (天) 看板: R_Language 標題: Re: [問題] 資料整理問題(更改) 時間: Wed Sep 13 23:22:05 2017 ※ 引述《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 ※ 編輯: celestialgod (118.170.62.243), 09/13/2017 23:33:58
tony1331: 謝謝,再請問如果時間是rowname的話,那會比較簡單嗎? 09/14 11:35
clansoda: 沒有比較簡單 時間在rowname還是要拉出來才能melt 09/14 11:51
clansoda: datatable的形式也沒有rowname這個概念 09/14 11:51