如何用R中的第二个变量范围除变量的每个范围

本·泰特

我有一系列包含某些疾病分子的列,并且有一系列包含相同疾病分母的列。我想遍历每个分子列,除以相应的分母列,为每种疾病创建一个百分比列。

我所有的列都使用相同的名称格式,即disease1_num,疾病2_num,疾病1_den,疾病1_den

我想将疾病1_num / disease1_den * 100除以创建疾病1_perc,然后将疾病2_num / disease2_den * 100除以创建疾病2_perc等。

我的数据集中大约有20种疾病。

我主要使用tidyverse命令。

我试过使用collect创建两个数据集,一个使用分子,一个使用分母,提取疾病名称,将它们连接在一起,计算百分比,然后再次传播数据集,然后再将其添加回原始数据集,这确实有效但是有点长,理想情况下,我想在原始数据集中执行此操作。


# 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')

罗纳克·沙(Ronak Shah)

我们可以grep用来获取列索引并直接进行除法。

num_cols <- grep("num$", names(df), value = TRUE)
den_cols <- grep("den$", names(df), value = TRUE)
df[sub("_num","_perc", num_cols)]<- df[num_cols]/df[den_cols] * 100

df
#  id disease1_num disease2_num disease1_den disease2_den disease1_perc disease2_perc
#1  1            5            4           12           15          41.7          26.7
#2  2            8            6           14           16          57.1          37.5
#3  3           10            8           17           18          58.8          44.4

请注意,你需要确保你有相同数量的num_colsden_cols

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法将第二个变量传递给独立范围的AngularJS

如何在 R 上的 ggplot 中显示第二个变量

米特。如何将线程中每个用户生成的变量传递给第二个线程用户?

如何根据从第二个文件获取的值范围来排除文件中的行

如何使用highcharts指向数据中第二个索引的范围(dataClasses)?

如何从第二个窗口访问 MainWindow 的变量

在具有相同 Angular 控制器的第二个视图中无法识别范围变量

全局和局部范围变量(为什么这里的第二个打印输出是 28?)

将函数应用于列表,然后遍历r中的第二个变量

频率表,其中第二个变量为R中的“分析权重”

如何检查变量元组是否导致第二个元组列表中的匹配?

为什么第二个角色对第二个变量迷路

如何用逗号替换第二个空格

仅当变量小于第二个变量时才在bash中执行操作

如何确定第二个y轴上的音量范围

如何使用XSLT中第二个xml输入中的变量修改一个xml输入?

在一个变量上使用循环将第二个变量的值保留在R中的第三个变量中

使用R中第二个函数中一个函数的变量值

如何在同一个类的第二个函数中引用变量?

javascript:修改第二个变量首先修改

scanf不会为第二个变量赋值

scanf正在覆盖第二个变量

变量不传递给第二个php

用第二个参数替换()作为变量?

两个新的 url,但第二个在 Cypress 中缺少路径变量

根据2个变量值从第二个表中获取值

如何将第二个变量从route.php传递到Laravel 5中的控制器?

如何声明全局变量以从任务管理器中杀死第二个 EXCEL.EXE

替换列表中的每个第二个元素