在R中合并数据帧中几乎相同的行

在R中合并数据帧中几乎相同的行,r,dataframe,data-manipulation,R,Dataframe,Data Manipulation,我有一个临床数据的大数据框架(154个变量的882个obs)。在此数据框中,有441名独特的患者,除一列外,重复两次。表的虚拟版本如下所示: 身份证件 年龄 性别 瘤 类型 治疗 1. 76 F 冒号 腺 放射治疗 1. 76 F 冒号 腺 化疗 2. 70 M 冒号 腺 放射治疗 2. 70 M 冒号 腺 化疗 3. 68 M 冒号 腺 放射治疗 3. 68 M 冒号 腺 化疗 通常,如果您可以使用几行数据添加一个可复制的示例,例如使用dput(),那么将更容易帮助您解决问题-在这种情况下,从

我有一个临床数据的大数据框架(154个变量的882个obs)。在此数据框中,有441名独特的患者,除一列外,重复两次。表的虚拟版本如下所示:

身份证件 年龄 性别 瘤 类型 治疗 1. 76 F 冒号 腺 放射治疗 1. 76 F 冒号 腺 化疗 2. 70 M 冒号 腺 放射治疗 2. 70 M 冒号 腺 化疗 3. 68 M 冒号 腺 放射治疗 3. 68 M 冒号 腺 化疗
通常,如果您可以使用几行数据添加一个可复制的示例,例如使用
dput()
,那么将更容易帮助您解决问题-在这种情况下,从表中复制也可以

您可以尝试从
tidyr
包中使用
pivot\u wider()
。假设您的数据称为
df
,并且是TIBLE:

我们首先使用
pivot\u wide()
,然后重命名列名以获得您想要的内容

df%>%
pivot_-wide(id_-cols=c(id,年龄,性别,肿瘤),value_-from=治疗,name_-from=治疗)%>%
重命名(治疗a=放疗,治疗b=化疗)
#一个tibble:3x6
id年龄性别肿瘤治疗\u a治疗\u b
1 76 F结肠放疗化疗
2 70m结肠放疗化疗
368m结肠放疗化疗

一般来说,如果您可以使用几行数据添加一个可复制的示例,例如使用
dput()
,那么将更容易帮助您解决问题-在这种情况下,从表中复制也可以

您可以尝试从
tidyr
包中使用
pivot\u wider()
。假设您的数据称为
df
,并且是TIBLE:

我们首先使用
pivot\u wide()
,然后重命名列名以获得您想要的内容

df%>%
pivot_-wide(id_-cols=c(id,年龄,性别,肿瘤),value_-from=治疗,name_-from=治疗)%>%
重命名(治疗a=放疗,治疗b=化疗)
#一个tibble:3x6
id年龄性别肿瘤治疗\u a治疗\u b
1 76 F结肠放疗化疗
2 70m结肠放疗化疗
368m结肠放疗化疗

A
数据。使用
dcast

dcast(
  setDT(df)[,q := paste0(treatment,"_",head(letters,.N)),id:type],
  ...~ q, 
  value.var = "treatment")
给予

数据

> dput(df)
structure(list(id = c(1L, 1L, 2L, 2L, 3L, 3L), age = c(76L, 76L, 
70L, 70L, 68L, 68L), gender = c("F", "F", "M", "M", "M", "M"), 
    tumour = c("colon", "colon", "colon", "colon", "colon", "colon"
    ), type = c("adeno", "adeno", "adeno", "adeno", "adeno", 
    "adeno"), treatment = c("radiotherapy", "chemotherapy", "radiotherapy", 
    "chemotherapy", "radiotherapy", "chemotherapy")), class = "data.frame", row.names = c(NA, 
-6L))

使用
dcast的
data.table
选项

dcast(
  setDT(df)[,q := paste0(treatment,"_",head(letters,.N)),id:type],
  ...~ q, 
  value.var = "treatment")
给予

数据

> dput(df)
structure(list(id = c(1L, 1L, 2L, 2L, 3L, 3L), age = c(76L, 76L, 
70L, 70L, 68L, 68L), gender = c("F", "F", "M", "M", "M", "M"), 
    tumour = c("colon", "colon", "colon", "colon", "colon", "colon"
    ), type = c("adeno", "adeno", "adeno", "adeno", "adeno", 
    "adeno"), treatment = c("radiotherapy", "chemotherapy", "radiotherapy", 
    "chemotherapy", "radiotherapy", "chemotherapy")), class = "data.frame", row.names = c(NA, 
-6L))

这些软件包非常适合我要做的事情,我不知道为什么我找不到它们。非常感谢。这些软件包非常适合我要做的事情,我不知道为什么我找不到它们。非常感谢。谢谢你的建议,我以后一定会用
dput()
提问。答案也很好。谢谢你的建议,我以后一定会用
dput()
问这个问题。答案也很好。你可以检查你可以检查