gpt4 book ai didi

使用 R 中的多条分隔线高效读取数据

转载 作者:行者123 更新时间:2023-12-04 09:12:45 25 4
gpt4 key购买 nike

我有一个这样的示例数据集:

 8  02-Model (Minimum)
250.04167175293 17.4996566772461
250.08332824707 17.5000038146973
250.125 17.5008907318115
250.16667175293 17.5011672973633
250.20832824707 17.5013771057129
250.25 17.502140045166
250.29167175293 17.5025615692139
250.33332824707 17.5016822814941
7 03 (Maximum)
250.04167175293 17.5020561218262
250.08332824707 17.501148223877
250.125 17.501127243042
250.16667175293 17.5012378692627
250.20832824707 17.5016021728516
250.25 17.5024681091309
250.29167175293 17.5043239593506

数据文件的第一列表示该特定数据的行数(即 02-MODEl(最小值))。然后在 8 行之后我有另一行 7 03 (Maximum)这意味着对于 03(最大),我将有 7 行数据。

我写的函数如下:
readts <- function(x)
{
path <- x
# Read the first line of the file
hello1 <- read.table(path, header = F, nrows = 1,sep="\t")
tmp1 <- hello1$V1
# Read the data below first line
hello2 <- read.table(path, header = F, nrows = (tmp1), skip = 1,
col.names = c("Time", "value"))
hello2$name <- c(as.character(hello1$V2))
# Read data for the second chunk
hello3 <- read.table(path, header = F, skip = (tmp1 + 1),
nrows = 1,sep="\t")
tmp2 <- hello3$V1
hello4 <- read.table(path, header = F, skip = (tmp1 + 2),
col.names = c("Time", "value"),nrows=tmp2)
hello4$name <- c(as.character(hello3$V2))
# Combine data to create a dataframe
df <- rbind(hello2, hello4)
return(df)
}

我得到的输出如下:
> readts("jdtrial.txt")
Time value name
1 250.0417 17.49966 02-Model (Minimum)
2 250.0833 17.50000 02-Model (Minimum)
3 250.1250 17.50089 02-Model (Minimum)
4 250.1667 17.50117 02-Model (Minimum)
5 250.2083 17.50138 02-Model (Minimum)
6 250.2500 17.50214 02-Model (Minimum)
7 250.2917 17.50256 02-Model (Minimum)
8 250.3333 17.50168 02-Model (Minimum)
9 250.0417 17.50206 03 (Maximum)
10 250.0833 17.50115 03 (Maximum)
11 250.1250 17.50113 03 (Maximum)
12 250.1667 17.50124 03 (Maximum)
13 250.2083 17.50160 03 (Maximum)
14 250.2500 17.50247 03 (Maximum)
15 250.2917 17.50432 03 (Maximum)

jdtrial.txt 是我上面显示的数据。但是,当我有带有多个分隔符的大数据时,我的函数不起作用,我需要添加更多行,这使函数更加困惑。有没有更简单的方法来读取这样的数据文件?谢谢。

预期数据是我得到的数据。您可以尝试使用的数据:
 8  02-Model (Minimum)
250.04167175293 17.4996566772461
250.08332824707 17.5000038146973
250.125 17.5008907318115
250.16667175293 17.5011672973633
250.20832824707 17.5013771057129
250.25 17.502140045166
250.29167175293 17.5025615692139
250.33332824707 17.5016822814941
7 03 (Maximum)
250.04167175293 17.5020561218262
250.08332824707 17.501148223877
250.125 17.501127243042
250.16667175293 17.5012378692627
250.20832824707 17.5016021728516
250.25 17.5024681091309
250.29167175293 17.5043239593506
8 04-Model (Maximum)
250.04167175293 17.5020561218262
250.08332824707 17.501148223877
250.125 17.501127243042
250.16667175293 17.5012378692627
250.20832824707 17.5016021728516
250.25 17.5024681091309
250.29167175293 17.5043239593506
250.33332824707 17.5055828094482

最佳答案

不清楚多个分隔符指的是什么,但这里有一个解决方案,可以解决您实际显示的数据。

使用 fill=TRUE 读入数据填写空白字段。使用 is.hdr 跟踪哪些行是标题.转换 V2到数字(在标题行中用 V2 替换 NA,这样它们就不会生成警告)。然后在接下来的两列中用 NA 替换非标题行并使用 na.locf (link)用标题填充 NA。最后,只保留非标题行。

library(zoo)
DF <- read.table("jdtrial.txt", fill = TRUE, as.is = TRUE)

is.hdr <- DF$V3 != ""
transform(DF,
V2 = as.numeric(replace(V2, is.hdr, NA)),
V3 = na.locf(ifelse(is.hdr, V2, NA)),
name = na.locf(ifelse(is.hdr, V3, NA)))[!is.hdr, ]

最后一条语句的结果是:
         V1       V2       V3      name
2 250.0417 17.49966 02-Model (Minimum)
3 250.0833 17.50000 02-Model (Minimum)
4 250.1250 17.50089 02-Model (Minimum)
5 250.1667 17.50117 02-Model (Minimum)
6 250.2083 17.50138 02-Model (Minimum)
7 250.2500 17.50214 02-Model (Minimum)
8 250.2917 17.50256 02-Model (Minimum)
9 250.3333 17.50168 02-Model (Minimum)
11 250.0417 17.50206 03 (Maximum)
12 250.0833 17.50115 03 (Maximum)
13 250.1250 17.50113 03 (Maximum)
14 250.1667 17.50124 03 (Maximum)
15 250.2083 17.50160 03 (Maximum)
16 250.2500 17.50247 03 (Maximum)
17 250.2917 17.50432 03 (Maximum)
19 250.0417 17.50206 04-Model (Maximum)
20 250.0833 17.50115 04-Model (Maximum)
21 250.1250 17.50113 04-Model (Maximum)
22 250.1667 17.50124 04-Model (Maximum)
23 250.2083 17.50160 04-Model (Maximum)
24 250.2500 17.50247 04-Model (Maximum)
25 250.2917 17.50432 04-Model (Maximum)
26 250.3333 17.50558 04-Model (Maximum)

关于使用 R 中的多条分隔线高效读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17606321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com