Re: [問題] N*1資料 轉 a*b格式

作者: andrew43 (討厭有好心推文後刪文者)   2017-08-22 19:00:01
假如原始資料檔(以4列為一組為例)如下
#### data.txt begin ####
time1
a = 5
b = 70
c = "rest"
time2
a = 8
b = 15
c = "rest_2"
#### data.txt end ####
我用字串的角度把資料取出再排入 data frame。
重點在於從各列的規格寫成 regular expression。
library(magrittr)
txt <- readLines("data.txt", n = -1)
n <- length(txt)
ncol <- 4 # 之後自行修改成16
nrow <- n / ncol
data.frame(
time =
txt[grep("^time[[:digit:]]+", txt)],
a =
gsub("^a = ([[:digit:]]+)",
"\\1",
txt[grepl("^a = [[:digit:]]", txt)]) %>%
as.numeric,
b =
gsub("^b = ([[:digit:]]+)",
"\\1",
txt[grepl("^b = [[:digit:]]", txt)]) %>%
as.numeric,
c =
gsub("^c = \"([[:print:]]+)\"",
"\\1",
txt[grepl("^c = \"[[:print:]]+\"", txt)])
)
可得 data frame
'data.frame': 2 obs. of 4 variables:
$ time: Factor w/ 2 levels "time1","time2": 1 2
$ a : num 5 8
$ b : num 70 15
$ c : Factor w/ 2 levels "rest","rest_2": 1 2
※ 引述《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內同樣資料來分組
: 所以不太知道目前需要做的這功能要怎麼處理
: 手機發文,排版請見諒
: 感謝大家
:

Links booklink

Contact Us: admin [ a t ] ucptt.com