R:将复杂的时间序列数据帧转换为长
R: Covernt a complex time series dataframe to long
这是给R的
date <- seq(as.Date("2020/03/11"), as.Date("2020/03/16"), "day")
x_pos_a <- c(1, 5, 4, 9, 0)
x_pos_b <- c(2, 6, 9, 5, 4)
like so [...]
我有一个包含 69 个时间点的时间序列数据框。数据框中的行是日期。
从三个人群(A、B、C)测量了四个变量(pos、anx、ang、sad)。从每个群体 (x, y, z) 中抽取三个样本。目前,变量、人口和样本的每个组合都在数据框中形成一个列。例如,“x_pos_A”、“x_pos_B”、“x_pos_C”、x_anx_A“...”z_sad_b、“z_sad_c” ".
我想把它改造成下面的形状
“日期”“变量”“人口”“样本”“值”
我花了最后 3 个小时在论坛上搜索答案,但没有成功。
非常感谢任何帮助!
谢谢
您可以使用 tidyr
中的 pivot_longer
:
tidyr::pivot_longer(df,
cols = -date,
names_to = c('sample', 'variable', 'population'),
names_sep = '_')
# date sample variable population value
# <date> <chr> <chr> <chr> <dbl>
# 1 2020-03-11 x pos a 1
# 2 2020-03-11 x pos b 2
# 3 2020-03-12 x pos a 5
# 4 2020-03-12 x pos b 6
# 5 2020-03-13 x pos a 4
# 6 2020-03-13 x pos b 9
# 7 2020-03-14 x pos a 9
# 8 2020-03-14 x pos b 5
# 9 2020-03-15 x pos a 0
#10 2020-03-15 x pos b 4
数据
date <- seq(as.Date("2020/03/11"), as.Date("2020/03/15"), "day")
x_pos_a <- c(1, 5, 4, 9, 0)
x_pos_b <- c(2, 6, 9, 5, 4)
df <- data.frame(date, x_pos_a, x_pos_b)
这是给R的
date <- seq(as.Date("2020/03/11"), as.Date("2020/03/16"), "day")
x_pos_a <- c(1, 5, 4, 9, 0)
x_pos_b <- c(2, 6, 9, 5, 4)
like so [...]
我有一个包含 69 个时间点的时间序列数据框。数据框中的行是日期。 从三个人群(A、B、C)测量了四个变量(pos、anx、ang、sad)。从每个群体 (x, y, z) 中抽取三个样本。目前,变量、人口和样本的每个组合都在数据框中形成一个列。例如,“x_pos_A”、“x_pos_B”、“x_pos_C”、x_anx_A“...”z_sad_b、“z_sad_c” ".
我想把它改造成下面的形状
“日期”“变量”“人口”“样本”“值”
我花了最后 3 个小时在论坛上搜索答案,但没有成功。
非常感谢任何帮助! 谢谢
您可以使用 tidyr
中的 pivot_longer
:
tidyr::pivot_longer(df,
cols = -date,
names_to = c('sample', 'variable', 'population'),
names_sep = '_')
# date sample variable population value
# <date> <chr> <chr> <chr> <dbl>
# 1 2020-03-11 x pos a 1
# 2 2020-03-11 x pos b 2
# 3 2020-03-12 x pos a 5
# 4 2020-03-12 x pos b 6
# 5 2020-03-13 x pos a 4
# 6 2020-03-13 x pos b 9
# 7 2020-03-14 x pos a 9
# 8 2020-03-14 x pos b 5
# 9 2020-03-15 x pos a 0
#10 2020-03-15 x pos b 4
数据
date <- seq(as.Date("2020/03/11"), as.Date("2020/03/15"), "day")
x_pos_a <- c(1, 5, 4, 9, 0)
x_pos_b <- c(2, 6, 9, 5, 4)
df <- data.frame(date, x_pos_a, x_pos_b)