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