如何使用R将多行合并为一行?

如何使用R将多行合并为一行?,r,R,我有一个包含患者数据的大型数据集。有些患者有多行,我想合并这些行,这样每个患者都有一行 我有大约20个不同的变量。有些变量在合并行时需要保持不变(例如,第1组中有4行的患者在合并行时仍应在第1组),但我也有一些变量必须满足特定条件(例如,如果患者在一行(或多行)中进行了手术,则应为“是”。如果不是,则应为“否”). 我试图寻找答案,但我感到困惑。我尝试使用plyr,但似乎不建议使用此功能,因为它在处理非常大的数据集时会变得很慢。我已经找到了一些关于dplyr的信息,但我不明白应该如何使用它 例

我有一个包含患者数据的大型数据集。有些患者有多行,我想合并这些行,这样每个患者都有一行

我有大约20个不同的变量。有些变量在合并行时需要保持不变(例如,第1组中有4行的患者在合并行时仍应在第1组),但我也有一些变量必须满足特定条件(例如,如果患者在一行(或多行)中进行了手术,则应为“是”。如果不是,则应为“否”).

我试图寻找答案,但我感到困惑。我尝试使用plyr,但似乎不建议使用此功能,因为它在处理非常大的数据集时会变得很慢。我已经找到了一些关于dplyr的信息,但我不明白应该如何使用它

例如,我有以下数据集(很抱歉,我不熟悉Stackoverflow)

我想制作一个这样的数据帧

**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