我有一个包含长格式 t 检验结果的数据框,并希望对其进行转换,以便将 p 值信息创建为新列。 我的数据框是
structure(list(region = c("region 1", "region 1", "region 1",
"region 2", "region 2", "region 2", "region 3", "region 3", "region 3",
"region 4", "region 4", "region 4", "region 5", "region 5", "region 5",
"region 6", "region 6", "region 6"), group = c("Male", "Female",
"p-value", "Male", "Female", "p-value", "Male", "Female", "p-value",
"Male", "Female", "p-value", "Male", "Female", "p-value", "Male",
"Female", "p-value"), value = c(1.1, 0.9, 0.001, 0.5, 1.2, 0.612,
0.9, 0.1, 0.001, 0.9, 0.8, 0.7, 1.3, 0.8, 0.04, 2.3, 1.5, 0.561
)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA,
-18L))
所需的数据框是
structure(list(region = c("region 1", "region 1", "region 2",
"region 2", "region 3", "region 3", "region 4", "region 4", "region 5",
"region 5", "region 6", "region 6"), group = c("Male", "Female",
"Male", "Female", "Male", "Female", "Male", "Female", "Male",
"Female", "Male", "Female"), value = c(1.1, 0.9, 0.5, 1.2, 0.9,
0.1, 0.9, 0.8, 1.3, 0.8, 2.3, 1.5), `p-value` = c(0.001, 0.001,
0.612, 0.612, 0.001, 0.001, 0.7, 0.7, 0.04, 0.04, 0.561, 0.561
)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA,
-12L))
任何帮助将不胜感激。预先感谢!
您可以使用
tidyr
来实现此目的。首先是 pivot_wider()
group
列,然后是 pivot_longer()
。
dat |>
tidyr::pivot_wider(names_from = group) |>
tidyr::pivot_longer(
!c(region, `p-value`),
names_to = "group"
) |>
# These last two steps are get the same row and column order
dplyr::relocate(
region, group, value, `p-value`
) |>
dplyr::arrange(region, desc(group))
# # A tibble: 12 × 4
# region group value `p-value`
# <chr> <chr> <dbl> <dbl>
# 1 region 1 Male 1.1 0.001
# 2 region 1 Female 0.9 0.001
# 3 region 2 Male 0.5 0.612
# 4 region 2 Female 1.2 0.612
# 5 region 3 Male 0.9 0.001
# 6 region 3 Female 0.1 0.001
# 7 region 4 Male 0.9 0.7
# 8 region 4 Female 0.8 0.7
# 9 region 5 Male 1.3 0.04
# 10 region 5 Female 0.8 0.04
# 11 region 6 Male 2.3 0.561
# 12 region 6 Female 1.5 0.561