【发布时间】:2019-08-16 09:49:14
【问题描述】:
我有一系列包含某些疾病分子的列,以及一系列包含相同疾病分母的列。我想遍历每个分子列除以适当的分母列,为每种疾病创建一个百分比列。
我所有的列都遵循相同的名称格式,disease1_num、disease2_num、disease1_den、disease1_den
我想将 disease1_num/disease1_den*100 划分为 disease1_perc,然后将 disease2_num/disease2_den*100 划分为 disease2_perc 等。
我的数据集中大约有 20 种疾病。
我主要是使用 tidyverse 命令。
我尝试使用gather创建两个数据集,一个带有分子,一个带有分母,提取疾病名称,将它们连接在一起,计算百分比,然后再次传播数据集,然后将其添加回原始数据集,这确实有效,但有点啰嗦,理想情况下我想在原始数据集中执行此操作。
# A tibble: 3 x 5
id disease1_num disease2_num disease1_den disease2_den
<dbl> <dbl> <dbl> <dbl> <dbl>
1 1 5 4 12 15
2 2 8 6 14 16
3 3 10 8 17 18
df_num <- df %>%
select(id,disease1_num:disease2_num) %>%
gather(key="num_indicator",value="num",disease1_num:disease2_num) %>%
mutate(indicator=str_remove(num_indicator,'_num'))
df_den <- df%>%
select(id, disease1_den:disease2_den) %>%
gather(key="den_indicator",value="den",disease1_den:disease2_den) %>%
mutate(indicator=str_remove(den_indicator,'_den'))
df_numden <- left_join(df_num,df_den,c('id','indicator'))
df_perc <- df_numden %>%
mutate(perc_indicator=str_replace(den_indicator,'den','perc'),
perc=num/den*100) %>%
select(id, perc_indicator:perc) %>%
spread(perc_indicator,perc)
df_final <- left_join(df,df_perc,'id')
【问题讨论】: