gpt4 book ai didi

在 R 中逐行读取 csv 文件并创建一个特征?

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

我已将插值数据存储到一个包含 181 行的 csv 文件中,其中每行都有由标签表示的第一个元素,其余的是时间序列数据,例如采用以下格式:

第一行:0, 980, 888, 720,987,543

第二行:0, 880, 999, 820,990,888, 980, 898, 780,987

第三行:1, 945, 856, 767,745,883

第四行:2, 780, 899, 920,890,988, 780, 998, 870,787

第 5 行:2、800、900、822,999,880、988、899

其余 181 行依此类推,其中标签为 0,1,2,3,4,5,6。另外,请注意我每行都有不同的长度。我想创建特征,(通过应用让我们说,mean()是特征之一)仅使用时间序列,即“980,888,720,987,543”并排除“标签y”,即0,我想要对每一行执行此操作并创建一个包含 33 个特征和标签的数据框,例如:

dim(labl_feat_df)[1] # 181 rows
dim(labl_feat_df)[2] # 34 columns (33 features and the label)

所以 labl_feat_df 看起来像:

     label  mean(TS)  SD(TS) ........ feat33
1 0
2 0
.
.
.
181 6

其中mean(TS)和sd(TS)是第一个和第二个特征。

所以我的问题是:如何读取不同长度的文件?如果应该逐行,创建这 33 个特征并将它们添加到数据框中的可能性和效率如何?

最佳答案

1) dplyr/tidyr 使用末尾注释中的Lines,将其读入,添加行号、id,以及将形状从宽变长。删除 NA 行并汇总。

library(dplyr)
library(tidyr)

DF <- read.table(text =Lines, sep = ",", strip.white = TRUE, fill = NA)
DF %>%
mutate(id = 1:n()) %>%
pivot_longer(-c(V1, id)) %>%
drop_na %>%
group_by(V1, id) %>%
summarize(mean = mean(value), sd = sd(value)) %>%
ungroup

给予:

# A tibble: 5 x 4
V1 id mean sd
<int> <int> <dbl> <dbl>
1 0 1 824. 190.
2 0 2 914. 80.3
3 1 3 839. 82.9
4 2 4 879. 84.0
5 2 5 898. 75.3

2) Base R 使用 (1) 中的 DF 使用 reshape reshape 为长形式,使用 na.omit 删除 NA 聚合:

DF2 <- na.omit(reshape(DF, dir = "long", varying = list(2:ncol(DF))))
aggregate(V2 ~ V1 + id, DF2, function(x) c(mean = mean(x), sd = sd(x)))

给予:

  V1 id   V2.mean     V2.sd
1 0 1 823.60000 190.24800
2 0 2 913.55556 80.28404
3 1 3 839.20000 82.88667
4 2 4 879.11111 83.95750
5 2 5 898.28571 75.28770

注意

Lines <- "
0, 980, 888, 720,987,543
0, 880, 999, 820,990,888, 980, 898, 780,987
1, 945, 856, 767,745,883
2, 780, 899, 920,890,988, 780, 998, 870,787
2, 800, 900, 822,999,880, 988, 899"

关于在 R 中逐行读取 csv 文件并创建一个特征?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60006295/

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