如何使用R将多行合并为一行?
我有一个包含患者数据的大型数据集。有些患者有多行,我想合并这些行,这样每个患者都有一行 我有大约20个不同的变量。有些变量在合并行时需要保持不变(例如,第1组中有4行的患者在合并行时仍应在第1组),但我也有一些变量必须满足特定条件(例如,如果患者在一行(或多行)中进行了手术,则应为“是”。如果不是,则应为“否”). 我试图寻找答案,但我感到困惑。我尝试使用plyr,但似乎不建议使用此功能,因为它在处理非常大的数据集时会变得很慢。我已经找到了一些关于dplyr的信息,但我不明白应该如何使用它 例如,我有以下数据集(很抱歉,我不熟悉Stackoverflow) 我想制作一个这样的数据帧如何使用R将多行合并为一行?,r,R,我有一个包含患者数据的大型数据集。有些患者有多行,我想合并这些行,这样每个患者都有一行 我有大约20个不同的变量。有些变量在合并行时需要保持不变(例如,第1组中有4行的患者在合并行时仍应在第1组),但我也有一些变量必须满足特定条件(例如,如果患者在一行(或多行)中进行了手术,则应为“是”。如果不是,则应为“否”). 我试图寻找答案,但我感到困惑。我尝试使用plyr,但似乎不建议使用此功能,因为它在处理非常大的数据集时会变得很慢。我已经找到了一些关于dplyr的信息,但我不明白应该如何使用它 例
**Patient_Id** /**Group** /**Age** /**Gender** /**surgery y/n** /**no of surgeries**
1 - 1 - 63,33 - F - yes - 1
2 - 0 - 60 - M - yes - 2
3 - 1 - 65 - M - no - 0
4 - 0 - 61 - F - yes - 2
有人知道什么函数最适合使用吗?或者如何开始?
提前谢谢你
数据采用dput
格式。
df1 <-
structure(list(Patient_Id = c(1, 1, 1, 2, 3, 4, 4, 4),
Group = c(1, 1, 1, 0, 1, 0, 0, 0), Age = c(63, 63, 64,
60, 65, 60, 61, 62), Gender = c("F", "F", "F", "M",
"M", "F", "F", "F"), `surgery y/n` = c("no", "no", "yes",
"yes", "no", "no", "yes", "yes"), `no of surgeries` = c(0L,
0L, 1L, 2L, 0L, 0L, 1L, 1L)), row.names = c(NA, -8L),
class = "data.frame")
df2 <-
structure(list(Patient_Id = c(1, 2, 3, 4),
Group = c(1, 0, 1, 0), Age = c("63,33",
"60", "65", "61"), Gender = c("F", "M",
"M", "F"), `surgery y/n` = c("yes", "yes",
"no", "yes"), `no of surgeries` = c(1, 2,
0, 2)), row.names = c(NA, -4L),
class = "data.frame")
df1你的问题是直截了当的。通过dplyr
包实现这一点的一种方法是
library(dplyr)
df1 %>%
group_by(Patient_Id) %>%
summarise(Group = first(Group),
Age = mean(Age),
Gender = first(Gender),
`no of surgeries` = sum(`no of surgeries`),
`surgery y/n` = ifelse(`no of surgeries` == 0, 'no', 'yes'))
这就给了,
#一个tible:4 x 6
患者Id组年龄性别`手术次数``手术y/n`
1 1 63.3 F 1是
2 0 60米2是
3 3 1 65米0号
4 4 0 61 F 2是
欢迎来到StackOverflow!请阅读相关信息以及如何给出建议。这将使其他人更容易帮助你。为了更好地理解这个问题,请举一个重复的例子。@Diego,我很抱歉!我希望我的编辑使它更清楚,谢谢你。谢谢你的回答!我已经尝试了你的建议(也在之前),但问题是我得到的数据帧只有一个观测值!我尝试完全按照您在我的数据集上写的内容运行,但出现以下错误:更快的错误(.data[names(cols)]):长度(rows)==1不正确。您可以共享数据帧的结构吗?做str(你的数据框架)
并在你的问题中发布。我已经添加了数据框架的结构。我认为这是一个“正常”的数据帧,我看不出有什么问题!谢谢你的回答!我知道了!
library(dplyr)
df1 %>%
group_by(Patient_Id) %>%
summarise(Group = first(Group),
Age = mean(Age),
Gender = first(Gender),
`no of surgeries` = sum(`no of surgeries`),
`surgery y/n` = ifelse(`no of surgeries` == 0, 'no', 'yes'))
# A tibble: 4 x 6
Patient_Id Group Age Gender `no of surgeries` `surgery y/n`
<dbl> <dbl> <dbl> <chr> <int> <chr>
1 1 1 63.3 F 1 yes
2 2 0 60 M 2 yes
3 3 1 65 M 0 no
4 4 0 61 F 2 yes