【问题标题】:Transpose specific columns to organize a dataframe in R [duplicate]转置特定列以在 R 中组织数据框 [重复]
【发布时间】:2019-09-25 22:55:32
【问题描述】:

我有一个类似的文件,但列更多,但这是逻辑:

23-07 23-08 23-09 23-10 23-11    ID   Sire   trait1  trait2
        150                       1   John    10       5
 200                              2   James   15       2
                  300             3   Josh    60       1
             500                  4   Peter   80       0
                        600       5   Peter   90       8

我想要这个:

 Date     Weight   ID   Sire   trait1  trait2
 23-07     150      1   John    10       5
 23-09     200      2   James   15       2
 23-08     300      3   Josh    60       1
 23-10     500      4   Peter   80       0
 23-10     600      5   Peter   90       8

我尝试了几种涉及spreadtidyr的方法,但我做不到。

【问题讨论】:

  • 您可以拆分数据框,转置您想要转置的列和cbind您拆分的内容。但是,在您的情况下,转置不会给您想要的东西!
  • 使用gather 作为日期列,然后使用select 对列重新排序。您可能需要在收集后使用过滤器删除 Weight==NA 的行(或者收集中可能有一个选项来执行此操作)。

标签: r dataframe tidyr


【解决方案1】:

有了tidyr 1.0.0,你可以使用pivot_longer(),你可以在link阅读更多内容

df %>%
    pivot_longer(
        -c(ID,Sire,trait1,trait2),
        names_to = "Date",
        values_to = "Weight",
        values_drop_na = TRUE
    )

返回

# A tibble: 5 x 6
  ID    Sire  trait1 trait2 Date  Weight
  <chr> <chr> <chr>  <chr>  <chr> <chr> 
1 1     John  10     5      23-07 150   
2 2     James 15     2      23-09 200   
3 3     Josh  60     1      23-08 300   
4 4     Peter 80     0      23-10 500   
5 5     Peter 90     8      23-10 600   
df <- structure(list(`23-07` = c("150", NA, NA, NA, NA), `23-09` = c(NA, 
"200", NA, NA, NA), `23-08` = c(NA, NA, "300", NA, NA), `23-10` = c(NA, 
NA, NA, "500", "600"), ID = c("1", "2", "3", "4", "5"), Sire = c("John", 
"James", "Josh", "Peter", "Peter"), trait1 = c("10", "15", "60", 
"80", "90"), trait2 = c("5", "2", "1", "0", "8")), row.names = c(NA, 
-5L), class = c("tbl_df", "tbl", "data.frame"))

【讨论】:

  • pivot_longer() 具有删除 NA 值的参数,因此您可以添加 values_drop_na = TRUE 并避免使用 filter()
  • 谢谢,刚刚修改了我的答案。
猜你喜欢
  • 2018-07-13
  • 1970-01-01
  • 2021-07-05
  • 1970-01-01
  • 2023-03-09
  • 2013-09-05
  • 2021-07-09
  • 1970-01-01
  • 2022-01-02
相关资源
最近更新 更多