使用转置从宽到长重塑数据 table
Reshape data table from wide to long with transpose
我有一个数据集(Sample_pH):
Head(Sample_pH)
Mill Acid `1_day` `3_days` `1_week` `2_weeks` `4_weeks` `2_months` `3_months` `6-7_months`
<chr> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
1 Gävle 0 10.5 12.0 10.9 10.7 10.6 10.1 10 9.81
2 Gävle 0.5 8.7899999999999~ 10 9.29 9.08 9.39 9.13 9.14 8.86
3 Gävle 0.75 8.0500000000000~ 8.95 8.33 8.26 8.24 8.22 8.25 7.44
4 Gävle 1 6.7 7.82 7.77 8.02 8.19 7.79 7.97 6.99
5 Gävle 1.25 6.52 7.43 7.33 7.11 7.72 7.88 7.91 6.96
6 Gävle 1.5 6.41 7.25 7.28 6.92 7.63 7.01 7.64 6.7
Mill 列实际上有 338 行和几个不同的样品名称(Gävle、Obbola、Aspa 等)。我使用 tis 数据集制作 fawcet_wraped 图:
我想重塑此数据集,以便在绘图中每个面板都是 Mill 而不是 time_stamp,时间戳是绘制的组而不是 Mill,同时保持 x 和 y 不变.为了做到这一点,我必须重塑数据集,但根据我的理解,我已经将宽格式转置并更改为长格式,得到如下内容:
Acid Time Gävle Obbola Munksund
0 1_day 10.5 13 15.3
0.5 1_day 8.79 11.03 12.82
0.75 1_day 8.05 10.59 12.27
1 1_day 6.7 9.72 11.6
1.25 1_day 6.52 9.06 10.41
1.5 1_day 6.41 8.01 10.3
1.75 1_day 6.24 8.48 5.78
2 1_day 6.37 8.49 9.94
2.25 1_day 5.08 8.03 7.13
我尝试使用 melt
(来自 reshape2 和 data.table)但是由于 patterns
调用无法被我的版本识别,尽管我认为我必须重新加载这两个库使用 reshape
。我看过其他几个例子,但 none 似乎有我遇到的转置问题,我似乎无法自己解决。请帮忙?
编辑:
按要求:
dput(Sample_pH): https://docs.google.com/document/d/1AfJWPL1GjzAskRKzXWr8MDEvlHBrY-SxjKDZ7LY7lNY/edit?usp=sharing
以及我用来制作图表的 ggplot 代码:
ggplot(gather(Sample_pH, key=Time, value="value", -"Mill", -"Acid"),
aes(x=Acid, y=as.numeric(value), colour=Mill, group=Mill) ) +
geom_line() +
scale_color_ucscgb() +
facet_wrap(~ Time, scales = 'free', ncol =4) +
ylab("pH") +
xlab("ml 12.1 M HCl") +
theme(plot.title = element_text(hjust = 0.5),
legend.title = element_blank())
更好的方法是使用 tidyr 包中的新 pivot_londer 和 pivot_wider 函数。
更易于使用的约定,并具有方便的内置文本操作选项。在这种情况下,删除“X”。已添加到列名称中。
df <- read.table(header=TRUE, text="Mill Acid `1_day` `3_days` `1_week` `2_weeks` `4_weeks` `2_months` `3_months` `6-7_months`
Gävle 0 10.5 12.0 10.9 10.7 10.6 10.1 10 9.81
Gävle 0.5 8.79 10 9.29 9.08 9.39 9.13 9.14 8.86
Gävle 0.75 8.05 8.95 8.33 8.26 8.24 8.22 8.25 7.44
Gävle 1 6.7 7.82 7.77 8.02 8.19 7.79 7.97 6.99
Gävle 1.25 6.52 7.43 7.33 7.11 7.72 7.88 7.91 6.96
Gävle 1.5 6.41 7.25 7.28 6.92 7.63 7.01 7.64 6.7
Obbola 0 10.5 12.0 10.9 10.7 10.6 10.1 10 9.81
Obbola 0.5 8.79 10 9.29 9.08 9.39 9.13 9.14 8.86
Obbola 0.75 8.05 8.95 8.33 8.26 8.24 8.22 8.25 7.44
Obbola 1 6.7 7.82 7.77 8.02 8.19 7.79 7.97 6.99
Obbola 1.25 6.52 7.43 7.33 7.11 7.72 7.88 7.91 6.96
Obbola 1.5 6.41 7.25 7.28 6.92 7.63 7.01 7.64 6.7 ")
library(tidyr)
longdf <- df %>% pivot_longer(-c("Mill", "Acid"), names_to="Time", values_to = "value", names_prefix="X.")
answer <-longdf %>% pivot_wider(id_cols= c("Time", "Acid" ), names_from = "Mill" )
我有一个数据集(Sample_pH):
Head(Sample_pH)
Mill Acid `1_day` `3_days` `1_week` `2_weeks` `4_weeks` `2_months` `3_months` `6-7_months`
<chr> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
1 Gävle 0 10.5 12.0 10.9 10.7 10.6 10.1 10 9.81
2 Gävle 0.5 8.7899999999999~ 10 9.29 9.08 9.39 9.13 9.14 8.86
3 Gävle 0.75 8.0500000000000~ 8.95 8.33 8.26 8.24 8.22 8.25 7.44
4 Gävle 1 6.7 7.82 7.77 8.02 8.19 7.79 7.97 6.99
5 Gävle 1.25 6.52 7.43 7.33 7.11 7.72 7.88 7.91 6.96
6 Gävle 1.5 6.41 7.25 7.28 6.92 7.63 7.01 7.64 6.7
Mill 列实际上有 338 行和几个不同的样品名称(Gävle、Obbola、Aspa 等)。我使用 tis 数据集制作 fawcet_wraped 图:
我想重塑此数据集,以便在绘图中每个面板都是 Mill 而不是 time_stamp,时间戳是绘制的组而不是 Mill,同时保持 x 和 y 不变.为了做到这一点,我必须重塑数据集,但根据我的理解,我已经将宽格式转置并更改为长格式,得到如下内容:
Acid Time Gävle Obbola Munksund
0 1_day 10.5 13 15.3
0.5 1_day 8.79 11.03 12.82
0.75 1_day 8.05 10.59 12.27
1 1_day 6.7 9.72 11.6
1.25 1_day 6.52 9.06 10.41
1.5 1_day 6.41 8.01 10.3
1.75 1_day 6.24 8.48 5.78
2 1_day 6.37 8.49 9.94
2.25 1_day 5.08 8.03 7.13
我尝试使用 melt
(来自 reshape2 和 data.table)但是由于 patterns
调用无法被我的版本识别,尽管我认为我必须重新加载这两个库使用 reshape
。我看过其他几个例子,但 none 似乎有我遇到的转置问题,我似乎无法自己解决。请帮忙?
编辑: 按要求: dput(Sample_pH): https://docs.google.com/document/d/1AfJWPL1GjzAskRKzXWr8MDEvlHBrY-SxjKDZ7LY7lNY/edit?usp=sharing
以及我用来制作图表的 ggplot 代码:
ggplot(gather(Sample_pH, key=Time, value="value", -"Mill", -"Acid"),
aes(x=Acid, y=as.numeric(value), colour=Mill, group=Mill) ) +
geom_line() +
scale_color_ucscgb() +
facet_wrap(~ Time, scales = 'free', ncol =4) +
ylab("pH") +
xlab("ml 12.1 M HCl") +
theme(plot.title = element_text(hjust = 0.5),
legend.title = element_blank())
更好的方法是使用 tidyr 包中的新 pivot_londer 和 pivot_wider 函数。
更易于使用的约定,并具有方便的内置文本操作选项。在这种情况下,删除“X”。已添加到列名称中。
df <- read.table(header=TRUE, text="Mill Acid `1_day` `3_days` `1_week` `2_weeks` `4_weeks` `2_months` `3_months` `6-7_months`
Gävle 0 10.5 12.0 10.9 10.7 10.6 10.1 10 9.81
Gävle 0.5 8.79 10 9.29 9.08 9.39 9.13 9.14 8.86
Gävle 0.75 8.05 8.95 8.33 8.26 8.24 8.22 8.25 7.44
Gävle 1 6.7 7.82 7.77 8.02 8.19 7.79 7.97 6.99
Gävle 1.25 6.52 7.43 7.33 7.11 7.72 7.88 7.91 6.96
Gävle 1.5 6.41 7.25 7.28 6.92 7.63 7.01 7.64 6.7
Obbola 0 10.5 12.0 10.9 10.7 10.6 10.1 10 9.81
Obbola 0.5 8.79 10 9.29 9.08 9.39 9.13 9.14 8.86
Obbola 0.75 8.05 8.95 8.33 8.26 8.24 8.22 8.25 7.44
Obbola 1 6.7 7.82 7.77 8.02 8.19 7.79 7.97 6.99
Obbola 1.25 6.52 7.43 7.33 7.11 7.72 7.88 7.91 6.96
Obbola 1.5 6.41 7.25 7.28 6.92 7.63 7.01 7.64 6.7 ")
library(tidyr)
longdf <- df %>% pivot_longer(-c("Mill", "Acid"), names_to="Time", values_to = "value", names_prefix="X.")
answer <-longdf %>% pivot_wider(id_cols= c("Time", "Acid" ), names_from = "Mill" )