【问题标题】:Merge rows with different values into a single row in R将具有不同值的行合并为R中的一行
【发布时间】:2022-09-23 12:00:41
【问题描述】:

我有一个如下所示的数据集:

ID           | age | disease
smith192     | 17  | lung_cancer
green484     | 12  | diabetes
green484     | 13  | heart_irregularities
tom584       | 12  | colon_cancer
tom584       | 14  | diabetes
tom584       | 15  | malnutrition

我希望 R 将其组织成这样:

ID           | age_1 | disease_1    | age_2 | disease_2            | age_3 | disease_3    |
smith192     | 17    | lung_cancer  | NA    | NA                   | NA    | NA           |
green484     | 12    | diabetes     | 13    | heart_irregularities | NA    | NA           |
tom584       | 12    | colon_cancer | 14    | diabetes             | 15    | malnutrition |

任何帮助将不胜感激!

    标签: r dataframe pivot reshape


    【解决方案1】:

    您可以为每个ID 创建疾病指数,然后将数据旋转到宽度。

    library(dplyr)
    library(tidyr)
    
    df %>%
      group_by(ID) %>%
      mutate(n = 1:n()) %>%
      ungroup() %>%
      pivot_wider(ID, names_from = n, values_from = c(age, disease))
    
    # # A tibble: 3 × 7
    #   ID       age_1 age_2 age_3 disease_1    disease_2            disease_3
    #   <chr>    <dbl> <dbl> <dbl> <chr>        <chr>                <chr>
    # 1 smith192    17    NA    NA lung_cancer  NA                   NA
    # 2 green484    12    13    NA diabetes     heart_irregularities NA
    # 3 tom584      12    14    15 colon_cancer diabetes             malnutrition
    
    数据
    df <- structure(list(ID = c("smith192", "green484", "green484", "tom584",
    "tom584", "tom584"), age = c(17, 12, 13, 12, 14, 15), disease = c("lung_cancer",
    "diabetes", "heart_irregularities", "colon_cancer", "diabetes",
    "malnutrition")), class = "data.frame", row.names = c(NA, -6L))
    

    【讨论】:

      猜你喜欢
      • 2019-05-24
      • 2016-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多