重命名时旋转更宽
pivot wider while renaming
我有一个table这样的
id name value
1 PROD_N NA
2 PROD_N_NATIONAL 0.789
3 PROD_N1 0.5
4 PROD_N1_NATIONAL 0.2
5 PROD_N2 0.4
6 PROD_N2_NATIONAL 0.3
7 PROD_N3 NA
8 PROD_N3_NATIONAL 0.221
9 PROD_N4 0.2
10 PROD_N4_NATIONAL 0.391
我需要类似的东西(为了制作一个带有填充的 gg plot 分组条)。
ID year prod prod_national
1 2020 NA 0.789
2 2019 0.5 0.2
3 2018 0.4 0.3
4 2017 NA 0.221
5 2016 0.2 0.391
我几乎可以肯定我应该使用 pivot_wider 但我无法做到这一点。我总是以
结尾
id prod_n prod_n_national prod_n1 prod_n1_national ...
此外,这是另一个问题,但即使有了所需的 table,我也不确定如何在同一张图中绘制两个 'y' 值。但我会看到我什么时候到那里。
感谢任何提示!
我看到在将 table 转换为宽格式之前可能需要处理两个步骤。
year
列必须由 name
列中的数字创建
- 必须删除
name
列中的数字。
代码
df %>%
mutate(year = 2020 - replace_na(as.numeric(str_extract(name, "\d")), 0),
name = str_remove(name, "\d")) %>%
pivot_wider(id_cols = year,
names_from = name,
values_from = value) %>%
mutate(ID = row_number())
# A tibble: 5 x 4
year PROD_N PROD_N_NATIONAL ID
<dbl> <dbl> <dbl> <int>
1 2020 NA 0.789 1
2 2019 0.5 0.2 2
3 2018 0.4 0.3 3
4 2017 NA 0.221 4
5 2016 0.2 0.39 5
数据
df <- structure(list(id = 1:10, name = structure(1:10, .Label = c("PROD_N",
"PROD_N_NATIONAL", "PROD_N1", "PROD_N1_NATIONAL", "PROD_N2",
"PROD_N2_NATIONAL", "PROD_N3", "PROD_N3_NATIONAL", "PROD_N4",
"PROD_N4_NATIONAL"), class = "factor"), value = c(NA, 0.789,
0.5, 0.2, 0.4, 0.3, NA, 0.221, 0.2, 0.39)), class = "data.frame", row.names = c(NA,
-10L))
情节
在 ggplot 中绘制两个 y 变量 取决于您需要哪种绘图。
如果你需要两个不同的 geom_x
你可以这样做:
ggplot(df_wide) +
geom_line(aes(y = PROD_N, x = year)) +
geom_point(aes(y = PROD_N_NATIONAL, x = year))
如果您想要相同的 geom_x
但名称颜色不同,那么您可能需要长格式:
df %>%
mutate(year = 2020 - replace_na(as.numeric(str_extract(name, "\d")), 0),
name = str_remove(name, "\d")) %>%
ggplot() +
geom_line(aes(y = value, x = year, color = name))
我有一个table这样的
id name value
1 PROD_N NA
2 PROD_N_NATIONAL 0.789
3 PROD_N1 0.5
4 PROD_N1_NATIONAL 0.2
5 PROD_N2 0.4
6 PROD_N2_NATIONAL 0.3
7 PROD_N3 NA
8 PROD_N3_NATIONAL 0.221
9 PROD_N4 0.2
10 PROD_N4_NATIONAL 0.391
我需要类似的东西(为了制作一个带有填充的 gg plot 分组条)。
ID year prod prod_national
1 2020 NA 0.789
2 2019 0.5 0.2
3 2018 0.4 0.3
4 2017 NA 0.221
5 2016 0.2 0.391
我几乎可以肯定我应该使用 pivot_wider 但我无法做到这一点。我总是以
结尾id prod_n prod_n_national prod_n1 prod_n1_national ...
此外,这是另一个问题,但即使有了所需的 table,我也不确定如何在同一张图中绘制两个 'y' 值。但我会看到我什么时候到那里。
感谢任何提示!
我看到在将 table 转换为宽格式之前可能需要处理两个步骤。
year
列必须由name
列中的数字创建- 必须删除
name
列中的数字。
代码
df %>%
mutate(year = 2020 - replace_na(as.numeric(str_extract(name, "\d")), 0),
name = str_remove(name, "\d")) %>%
pivot_wider(id_cols = year,
names_from = name,
values_from = value) %>%
mutate(ID = row_number())
# A tibble: 5 x 4
year PROD_N PROD_N_NATIONAL ID
<dbl> <dbl> <dbl> <int>
1 2020 NA 0.789 1
2 2019 0.5 0.2 2
3 2018 0.4 0.3 3
4 2017 NA 0.221 4
5 2016 0.2 0.39 5
数据
df <- structure(list(id = 1:10, name = structure(1:10, .Label = c("PROD_N",
"PROD_N_NATIONAL", "PROD_N1", "PROD_N1_NATIONAL", "PROD_N2",
"PROD_N2_NATIONAL", "PROD_N3", "PROD_N3_NATIONAL", "PROD_N4",
"PROD_N4_NATIONAL"), class = "factor"), value = c(NA, 0.789,
0.5, 0.2, 0.4, 0.3, NA, 0.221, 0.2, 0.39)), class = "data.frame", row.names = c(NA,
-10L))
情节
在 ggplot 中绘制两个 y 变量 取决于您需要哪种绘图。
如果你需要两个不同的 geom_x
你可以这样做:
ggplot(df_wide) +
geom_line(aes(y = PROD_N, x = year)) +
geom_point(aes(y = PROD_N_NATIONAL, x = year))
如果您想要相同的 geom_x
但名称颜色不同,那么您可能需要长格式:
df %>%
mutate(year = 2020 - replace_na(as.numeric(str_extract(name, "\d")), 0),
name = str_remove(name, "\d")) %>%
ggplot() +
geom_line(aes(y = value, x = year, color = name))