R_Language 板


LINE

※ 引述《playaround (打滾)》之銘言: : [問題類型]: : N*1的資料 轉換成M*16 : [軟體熟悉度]: : R初學 : [問題敘述]: : 原始資料(csv檔)資料大致是這樣: : time1 : a = 5 : b = 70 : c = "rest" : ... : ... : time2 : a = 8 : b = 15 : c = "rest_2" : ... : ... : 想要以16列為單位整理成M*16的矩陣 : 第一列是col標題 : 和每列前面的a,b,c等是row標題 : 類似這樣: : time a b c ... : time1 5 70 "rest" : time2 8 15 "rest_2" : 有找一些指令好像都是以同col內同樣資料來分組 : 所以不太知道目前需要做的這功能要怎麼處理 : 手機發文,排版請見諒 : 感謝大家 : ----- : Sent from JPTT on my Xiaomi MI 5. 給另外一種方法參考,然後教你怎麼做自動轉型XD dataStr <- 'time1 a = 5 b = 70 c = "rest" time2 a = 8 b = 15 c = "rest_2" time3 a = 1 b = 45 c = "rest_3"' # 等同於前兩位用readLines讀檔案的txt變數 txt <- strsplit(dataStr, "\n")[[1]] # 把time也取代成同樣的格式 txt[grepl("time", txt)] <- paste0("time = ", txt[grepl("time", txt)]) # 把每一列切割成 column name跟value兩個,然後用cbind合併全部分割的資料 out <- do.call(cbind, strsplit(txt, "\\s+=\\s+")) # 取得column names columnNames <- unique(out[1, ]) # 把每一個column對應的value取成一個list columnList <- lapply(columnNames, function(colname){ type.convert(out[2 , out[1, ] == colname]) # 取出對應名字的值並做自動轉型 }) # 確定每一個欄位長度都一樣 if (length(unique(sapply(out, length))) != 1) stop("每個欄位的長度不一樣,請檢查資料") # 給名字 names(columnList) <- columnNames # 轉成data.frame resultDf <- as.data.frame(columnList) # time a b c # 1 time1 5 70 "rest" # 2 time2 8 15 "rest_2" # 3 time3 1 45 "rest_3" > str(resultDf) 'data.frame': 3 obs. of 4 variables: $ time: Factor w/ 3 levels "time1","time2",..: 1 2 3 $ a : int 5 8 1 $ b : int 70 15 45 $ c : Factor w/ 3 levels "\"rest\"","\"rest_2\"",..: 1 2 3 難得一篇完全沒用套件XD 套件版: library(data.table) library(stringr) library(pipeR) txt <- strsplit(dataStr, "\n")[[1]] txt[str_detect(txt, "time")] <- str_c("time = ", txt[str_detect(txt, "time")]) outDf <- txt %>>% str_detect("time") %>>% cumsum %>>% cbind(do.call(rbind, str_split(txt, "\\s+=\\s+"))) %>>% data.table %>>% setnames(c("id", "var", "value")) %>>% `[`(j = id := NULL) %>>% `[`(j = eval(names(.)) := lapply(.SD, type.convert)) # a b c time # 1: 5 70 "rest" time1 # 2: 8 15 "rest_2" time2 # 3: 1 45 "rest_3" time3 > str(outDf) Classes ‘data.table’ and 'data.frame': 3 obs. of 4 variables: $ a : int 5 8 1 $ b : int 70 15 45 $ c : Factor w/ 3 levels "\"rest\"","\"rest_2\"",..: 1 2 3 $ time: Factor w/ 3 levels "time1","time2",..: 1 2 3 - attr(*, ".internal.selfref")=<externalptr> -- R資料整理套件系列文: magrittr #1LhSWhpH (R_Language) https://goo.gl/72l1m9 data.table #1LhW7Tvj (R_Language) https://goo.gl/PZa6Ue dplyr(上.下) #1LhpJCfB,#1Lhw8b-s (R_Language) https://goo.gl/I5xX9b tidyr #1Liqls1R (R_Language) https://goo.gl/i7yzAz pipeR #1NXESRm5 (R_Language) https://goo.gl/zRUISx --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.253.88.5
※ 文章網址: https://webptt.com/m.aspx?n=bbs/R_Language/M.1503414254.A.448.html ※ 編輯: celestialgod (111.253.88.5), 08/23/2017 01:04:19







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP