gpt4 book ai didi

r - 将 FIX 消息格式 ("Tag=Value") 转换为 CSV

转载 作者:行者123 更新时间:2023-11-29 09:09:37 25 4
gpt4 key购买 nike

我有一个 35=S(引用消息;“Tag=Value”)的 csv/log 文件,我需要将比率提取到适当的 CSV 文件中以进行数据挖掘。这不是严格意义上的 FIX 相关,它更像是一个关于如何清理数据集的 R 相关问题。

原始消息看起来像这样:

190=1.1204 ,191=-0.000029,193=20141008,537=0        ,631=1.12029575,642=0.000145,10=56
190=7.20425,191=0.000141 ,537=0 ,631=7.2034485,10=140 , ,
190=1.26237,191=0 ,537=1 ,10=068 , , ,

我首先需要获得一个看起来像这样的中间数据集,其中对齐相同的标签。

190=1.1204 ,191=-0.000029,193=20141008,537=0,631=1.12029575,642=0.000145,10=56
190=7.20425,191=0.000141 , ,537=0,631=7.2034485 , ,10=140
190=1.26237,191=0 , ,537=1, , ,10=068

这又需要转换成这样:

190    ,191      ,193     ,537,631       ,642     ,10
1.1204 ,-0.000029,20141008,0 ,1.12029575,0.000145,56
7.20425,0.000141 , ,0 ,7.2034485 , ,140
1.26237,0 , ,1 , , ,068

我正在使用 awk 开发 bash 脚本,但我想知道我是否可以在 R 中做到这一点。目前,我最大的挑战是到达中间表。从中间表到最终表,我想到了将 R 与 tidyr 包一起使用,特别是功能“分离”。如果有人能提出更好的逻辑,我将不胜感激!

最佳答案

另一种可能性。从与@Andrie 相同的 scan 开始,但也使用参数 strip.whitena.strings:

x <- scan(text = "190=1.1204 ,191=-0.000029,193=20141008,537=0        ,631=1.12029575,642=0.000145,10=56
190=7.20425,191=0.000141 ,537=0 ,631=7.2034485,10=140 , ,
190=1.26237,191=0 ,537=1 ,10=068 , , ,",
sep = ",",
what = "character",
strip.white = TRUE,
na.strings = "")

# remove NA
x <- x[!is.na(x)]

然后使用 reshape2 包中的 colsplitdcast:

library(reshape2)

# split 'x' into two columns
d1 <- colsplit(string = x, pattern = "=", names = c("x", "y"))

# create an id variable, needed in dcast
d1$id <- ave(d1$x, d1$x, FUN = seq_along)

# reshape from long to wide
d2 <- dcast(data = d1, id ~ x, value.var = "y")

# id 10 190 191 193 537 631 642
# 1 1 56 1.12040 -0.000029 20141008 0 1.120296 0.000145
# 2 2 140 7.20425 0.000141 NA 0 7.203449 NA
# 3 3 68 1.26237 0.000000 NA 1 NA NA

因为你提到了tidyr:

library(tidyr)
d1 <- separate(data = data.frame(x), col = x, into = c("x", "y"), sep = "=")
d1$id <- ave(d1$x, d1$x, FUN = seq_along)
spread(data = d1, key = x, value = y)
# id 10 190 191 193 537 631 642
# 1 1 56 1.1204 -0.000029 20141008 0 1.12029575 0.000145
# 2 2 140 7.20425 0.000141 <NA> 0 7.2034485 <NA>
# 3 3 068 1.26237 0 <NA> 1 <NA> <NA>

这会将值保留为 character。如果你想要numeric,你可以在spread中设置convert = TRUE

关于r - 将 FIX 消息格式 ("Tag=Value") 转换为 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26609810/

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