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