【问题标题】:How to generate single number output for multiple pattern types in R?如何在 R 中为多种模式类型生成单个数字输出?
【发布时间】:2020-08-01 09:43:27
【问题描述】:

我正在使用 R 来完成一个项目,在该项目中我测量了主动脉瓣上的钙量。我有 5 列:三张传单的体积和内部/外部的总体积。为了表征我在患者中发现的各种分布,我想将每个模式(总共 12 个)与新列中的单个数字相关联。例如:

  • 卷传单 1 > 卷传单 2 > 卷传单 3 和卷内 > 外 --> 1
  • 卷传单 1 > 卷传单 2 > 卷传单 3 和卷外 > 内 --> 2
  • 卷传单 2 > 卷传单 1 > 卷传单 3 和卷内 > 外 --> 3

...

  • 卷传单 3 > 卷传单 2 > 卷传单 1 和卷外 > 内 --> 12

我查看了 R 中的字典,但没有找到好的解决方案。

structure(
  list(ctanalysis_abscv_l = c(7.897880437, 1263.82504529, 80.64252297, 602.51047473),
       ctanalysis_abscv_r = c(15.38538081, 842.835871, 94.030160661, 694.35817674),
       ctanalysis_abscv_n = c(275.901870908, 1356.2005494, 358.2288726, 794.49459655),
       ctanalysis_inside_volume = c(35.8760545, NA, 153.5488922, 715.0530575),
       ctanalysis_outside_volume = c(264.2563071, NA, 379.5414025, 1381.3362945)),
  row.names = c(NA, 4L),
  class = "data.frame")

【问题讨论】:

  • 你能展示一个可重现的小例子和预期的输出
  • 从我的数据框中添加了一个 dput 输出,希望对 akrun 有所帮助!
  • 谢谢你能展示你对那 4 行的预期输出
  • 是的,所以我的数据框中有绝对量,但生成了一个通用模式来更轻松地表征数据。如上所述,我总共有 12 种模式,每个患者都应该被分配到这 12 种模式中的一种。所以患者 1:左 = 7.89788,右 = 15.3853,非 = 275.9019,内部体积 = 35.87605,外部体积 = 264.2563。我想以某种方式编码:非> R> L和外部>内部。使用上面的模式,这将是模式 7 让我们说。我希望在新列中输出“7”。希望这是有道理的。
  • 没关系,只是想根据您的输入了解预期

标签: r dataframe dictionary


【解决方案1】:

一种选择是使用pivot_longer然后arrange'value'列转换为'long'格式,按'rn'对paste列名进行分组,并使用match创建索引

library(dplyr)
library(tidyr)
library(stringr)
df1 %>%
    mutate(rn = row_number()) %>% 
    pivot_longer(cols = -rn, values_drop_na = TRUE) %>%
    arrange(rn, desc(value)) %>% 
    group_by(rn) %>%
    summarise(name = str_c(name, collapse="|")) %>% 
    mutate(new = match(name, unique(name))) %>% 
    select(-rn, -name) %>%
    bind_cols(df1, .)

【讨论】:

    【解决方案2】:

    如果没有提供数据框,这有点困难,但是,我想您可以将新值分配给向量,然后将它们绑定到数据框中。它看起来像:

    test.dat = ## whatever your original findings are
    new.num = ## the vector of the number for each column. (need 5)
    new.dat = data.frame(test.dat, new.num) ## new frame with "Test.dat$Findings"
    

    我希望这很有用。如果这不是你要问的,我很抱歉。我只是在医疗领域提供帮助。

    【讨论】:

      猜你喜欢
      • 2015-10-18
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多