Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过串联重塑,使R中的每个变量都有一个单独的时间序列_R_Reshape_Reshape2_Melt - Fatal编程技术网

通过串联重塑,使R中的每个变量都有一个单独的时间序列

通过串联重塑,使R中的每个变量都有一个单独的时间序列,r,reshape,reshape2,melt,R,Reshape,Reshape2,Melt,希望以一种有助于我创建用于时间序列分析的数据集的方式,用下面的结构重塑数据集 下面的数据集是一个示例,我有多个变量作为列,多个品牌作为行以及它们各自的时间段 品牌周期V1 V2 V3 一周1 1 2 3 一周2 1 2 3 一周3 1 2 3 B周1 1 2 3 B周2 1 2 3 B周3 1 2 3 C周1 1 2 3 C周2 1 2 3 C周3 1 2 3 数据集如下所示: 周期A_V1 A_V2 A_V3 B_V1 B_V2 B_V3 C_V1 C_V2 C_V3 周1 周2 第3周

希望以一种有助于我创建用于时间序列分析的数据集的方式,用下面的结构重塑数据集

下面的数据集是一个示例,我有多个变量作为列,多个品牌作为行以及它们各自的时间段


品牌周期V1 V2 V3
一周1 1 2 3
一周2 1 2 3
一周3 1 2 3
B周1 1 2 3
B周2 1 2 3
B周3 1 2 3
C周1 1 2 3
C周2 1 2 3
C周3 1 2 3

数据集如下所示:


周期A_V1 A_V2 A_V3 B_V1 B_V2 B_V3 C_V1 C_V2 C_V3
周1
周2
第3周


我想知道重塑包或我可以使用的任何其他包中是否有一些功能

如果你习惯了
tidyverse
,你可以使用
tidyr
收集
传播
的组合(与答案类似):


基本操作可以在一个read.zoo调用中完成,该调用将:

  • 读取brands.dat文件(在末尾的注释中重复定义)——如果您有一个数据框作为输入,则使用下面注释掉的行,而不是未注释的行
  • 按品牌划分数据
结果是一个动物园系列
z
。序列可以直接以这种形式操作,也可以使用
fortify.zoo(z)
转换为数据帧,或者通过将索引聚合为数值(如下文所示),然后使用
as.ts(z)
转换为ts序列

如果您希望列名完全符合问题中所示的格式,请添加以下内容:

colnames(z) <- sub("(\\w+)[.](\\w+)", "\\2_\\1", colnames(z))
time(z) <- 1:nrow(z)
或者这个:

time(z) <- as.numeric(gsub("\\D", "", time(z))

time(z)我们可以使用
data.table
中的
dcast
来获取多个
value.var

library(data.table)
dcast(setDT(df1), Period ~ Brand, value.var =names(df1)[3:5])
#   Period V1_A V1_B V1_C V2_A V2_B V2_C V3_A V3_B V3_C
#1:  Week1    1    1    1    2    2    2    3    3    3
#2:  Week2    1    1    1    2    2    2    3    3    3
#3:  Week3    1    1    1    2    2    2    3    3    3

数据中查看
dcast
dcast(setDT(df1),Period~Brand,value.var=c(“V1”,“V2”,“V3”))
他们正在寻找一种解决方案,我不需要为每种情况键入变量名,比如“V1”,“V2”等,然后您可以使用
名称(df1)[3:5]
that@akrun这很有效!这同样有效,但我发现@akrun解决方案目前更可行。顺便说一句,如果你不介意的话,你能解释一下这行代码吗?colnames(z)匹配一个或多个单词字符,后跟一个点,后跟一个或多个单词字符。括号定义了捕获组。替换字符串然后指定与第二个捕获组的匹配、下划线和与第一个捕获组的匹配。
colnames(z) <- sub("(\\w+)[.](\\w+)", "\\2_\\1", colnames(z))
time(z) <- 1:nrow(z)
time(z) <- as.numeric(gsub("\\D", "", time(z))
Lines <- "
Brand   Period  V1  V2  V3
A      Week1    1   2   3
A      Week2    1   2   3
A      Week3    1   2   3
B      Week1    1   2   3
B      Week2    1   2   3
B      Week3    1   2   3
C      Week1    1   2   3
C      Week2    1   2   3
C      Week3    1   2   3"
cat(Lines, file = "brands.dat")
brands <- read.table(text = Lines, header = TRUE)
library(data.table)
dcast(setDT(df1), Period ~ Brand, value.var =names(df1)[3:5])
#   Period V1_A V1_B V1_C V2_A V2_B V2_C V3_A V3_B V3_C
#1:  Week1    1    1    1    2    2    2    3    3    3
#2:  Week2    1    1    1    2    2    2    3    3    3
#3:  Week3    1    1    1    2    2    2    3    3    3