【发布时间】:2021-08-26 15:14:26
【问题描述】:
我有一个患有某些疾病的患者数据集 (Diag_main)。其中一些疾病具有亚分类诊断(Diag_subgroup_CBS 或Diag_subgroup_PPA)。例如,Diag_main 中值为 =CBS 的个人将具有相应的类型 1 或类型 2 值(在 Diag_subgroup_CBS 中),而Diag_main 中值为 PPA 的个人将具有 PPA-A 或 PPA-B。
示例数据:
df<-data.frame(
id=c(1:7),
Diag_main=c('BBA', 'CBS', 'PPA', 'AM', 'CBS', 'PPA', 'BBA'),
Diag_subgroup_CBS=c(NA, '0', NA, NA, '1', NA, NA),
Diag_subgroup_PPA=c(NA, NA, '0', NA, NA, NA, '1')
)
我在寻找什么:
我想创建一个新列 (Diag_combined),它 (i) 对于 CBS:将 0 重新编码为 Type1,将 1 重新编码为 Type2,(ii) 对于 PPA:将 0 重新编码为 PPA-A,将 1 重新编码为 PPA-B, (iii) 对于具有 CBS 或 PPA 的个人,粘贴其子组值(即 Type1、PPA-A 等)和 (ii) 对于没有 CBS 或 PPA 的个人,粘贴其Diag_main 值。
df2<-data.frame(
id=c(1:7),
Diag_main=c('BBA', 'CBS', 'PPA', 'AM', 'CBS', 'PPA', 'BBA'),
Diag_subgroup_CBS=c(NA, '0', NA, NA, '1', NA, NA),
Diag_subgroup_PPA=c(NA, NA, '0', NA, NA, NA, '1'),
Diag_combined=c('BBA', 'Type1', 'PPA-A', 'AM', 'Type2', 'PPA-B', 'BBA')
)
我尝试使用此代码使用dplyr::mutate 执行此操作:
df3 <- mutate(df,
Diag_combined=ifelse(grepl('0', Diag_subgroup_CBS), 'Type1',
ifelse(grepl('1', Diag_subgroup_CBS), 'Type2',
ifelse(grepl('0', Diag_subgroup_PPA), 'PPA-A',
ifelse(grepl('1', Diag_subgroup_PPA), 'PPA-B', Diag_main))))))
当我运行此程序时,我收到错误声明 Problem with 'mutate()' column 'Diag_combined'. The error occurred in Diag_combined: id = 1.。我不知道这是不是因为dplyr::mutate 没有忽略 NA。
我不明白为什么这段代码不起作用。最快、最有效的方法是什么?
【问题讨论】:
标签: r dataframe conditional-formatting dplyr