通过创建新列来转换数据框

问题描述 投票:0回答:1

我有一个包含长格式 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))

任何帮助将不胜感激。预先感谢!

r dplyr
1个回答
0
投票

您可以使用

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
© www.soinside.com 2019 - 2024. All rights reserved.