我的数据看起来像这样
Peak Ret. Time: 2.083 Min
Number of Points: 6
187.0 194009.0
188.0 308396.0
189.0 319163.0
190.0 321506.0
191.0 321962.0
192.0 321474.0
Peak Ret. Time: 2.683 Min
Number of Points: 6
187.0 194009.0
188.0 308396.0
189.0 319163.0
190.0 321506.0
191.0 321962.0
192.0 321474.0
Peak Ret. Time: 2.667 Min
Number of Points: 6
187.0 59137.0
188.0 75392.0
189.0 64461.0
190.0 51970.0
191.0 41550.0
192.0 33235.0
193.0 22146.0
194.0 19069.0
我希望输出的内容如下所示
187point 188point 189point 190point 191point 192point
2.083 194009 308396 319163 321506 321962 321474
2.683 194009 308396 319163 321506 321962 321474
2.667 59137 75392 64461 51970 41550 33235
最后,一个图中的第一列与所有其他列的图也是受欢迎的。这里粘贴了读取数据的示例。
答案 0 :(得分:2)
我会在" data.table"中使用fread
读取该文件,然后在进行一些修改后使用dcast
重新整形数据。
以下为您分享的示例对我有用:
library("data.table")
x <- fread("https://gist.githubusercontent.com/anonymous/3d40de7d2cb6d5ab97e5/raw/2412d824ca31ba7a927d5c46f7b091e69eb6b400/sam.asc", header = FALSE)
这是dcast
步骤:
out <- dcast(x[, c("peak_ret_time", "N") := list(V2[1], sequence(.N)),
by = cumsum(grepl("Peak", V1))][N > 2],
peak_ret_time ~ V1, value.var = "V2")
如果要将值转换为数字,也可以执行以下操作:
out[, (names(out)) := lapply(.SD, type.convert)]
将dim(out)
与预期值进行比较。列数大于值的数量,因为第一列是&#34; peak_ret_time&#34;。
dim(out)
# [1] 57 428
sum(grepl("Peak", x$V1))
# [1] 57
unique(x$V2[grepl("Number", x$V1)])
# [1] "427"
out[1:6, 1:6, with = FALSE]
## peak_ret_time 187.0 188.0 189.0 190.0 191.0
## 1: 16.217 Min 30718.0 38885.0 32012.0 24276.0 18139.0
## 2: 17.433 Min 52646.0 69443.0 59216.0 47639.0 37672.0
## 3: 18.617 Min 58199.0 84889.0 71242.0 55595.0 42094.0
## 4: 19.183 Min 66975.0 97531.0 82464.0 64679.0 49354.0
## 5: 2.083 Min 194009.0 308396.0 319163.0 321506.0 321962.0
## 6: 2.417 Min 20844.0 30229.0 31131.0 30874.0 30638.0
答案 1 :(得分:1)
我们可以从here
进行res
的转置
res1 <- t(res)
res2 <- res1[-1,]
colnames(res2) <- as.character(res1[1,])
res2[1:3,1:3]
# 187 188 189
#2.083 Min 194009 308396 319163
#2.417 Min 20844 30229 31131
#2.667 Min 59137 75392 64461
答案 2 :(得分:1)
我可能过于复杂了。但是这是我对此的尝试,这可能解释了点数不能保持不变的情况。
require(reshape2)
x <- readLines("https://gist.githubusercontent.com/anonymous/3d40de7d2cb6d5ab97e5/raw/2412d824ca31ba7a927d5c46f7b091e69eb6b400/sam.asc")
x <- read.table(text = x, sep = "\t", stringsAsFactors=F)
temp <- unlist(apply(cbind(x[grep("^Peak", x$V1),2], x[grep("^Number", x$V1),2]), 1,
function(x) list(rep(x[1], times = as.numeric(x[2])))))
x <- x[grep("^Peak|^Number", x$V1, invert=T),]
x <- cbind(temp, x)
x <- dcast(x, temp ~ V1, value.var="V2")
无论如何,练习破解奇怪的数据结构很有趣。