首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将具有不同值的行合并为R中的一行

将具有不同值的行合并为R中的一行
EN

Stack Overflow用户
提问于 2022-09-23 03:29:26
回答 1查看 35关注 0票数 0

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

代码语言:javascript
运行
复制
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能把它组织成这样:

代码语言:javascript
运行
复制
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 |

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-23 03:55:35

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

  • base

代码语言:javascript
运行
复制
df |>
  transform(n = ave(ID, ID, FUN = seq)) |>
  reshape(direction = "wide", idvar = "ID", timevar = "n", v.names = c("age", "disease"))

#         ID age.1    disease.1 age.2            disease.2 age.3    disease.3
# 1 smith192    17  lung_cancer    NA                 <NA>    NA         <NA>
# 2 green484    12     diabetes    13 heart_irregularities    NA         <NA>
# 4   tom584    12 colon_cancer    14             diabetes    15 malnutrition

  • tidyverse

代码语言:javascript
运行
复制
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

数据

代码语言:javascript
运行
复制
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))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73822696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档