比较向量的元素并从向量中选择要在数据集中消除的元素

Compare elements of a vector and choose elements from vector to be eliminated in a data set

我的目标是消除数据帧中的重复

我写了一个程序来确定第17行中具有相同值的变量,接下来程序将这些变量放入其他数据并计算相关矩阵,我将这个相关矩阵的百分比设置为95%这意味着程序创建仅包含相关性超过 95%

的变量名称的向量

例如向量包含变量名称

>Vector

"MT91" "MT92" "MT93" 

我想用这个向量来计算所有其他行中这些变量的总和

例如我有这个数据:

姓名

                           MT91           MT93           MT92         MT95
QC_G1                      70027.02132    95774.1359     100         24                  
QC_G2                      69578.18634    81479.29575    200         45
QC_G3                      69578.18634    87021.95427    10          42545
QC_G4                      68231.14338    95558.76738    1000        425
QC_G5                      64874.12936    96780.77245    7000        4545
QC_G6                      63866.65780    91854.35304    19          455
Ctr1                       66954.38799   128861.36163    199         2424
Ctr2                       97352.55229   101353.25927    155         344
Ctr3                       61252.42545   115683.73755    188         3434
Bti1                       81873.96379   112164.14229    1222        444
Bti2                       84981.21914   0.00000         100         3443  
Bti3                       36629.02462   124806.49101    188         3434
Bti4                       0.00000       109927.26425    122         1000
rt                         13.90181      13.90586        12          13

所以我想用向量来计算除第17行以外的所有行中每个变量的总和,之后我只想保留总和最高的变量, 如您所见,我的向量包含变量:“MT91”、“MT92”、“MT93”,而 MT93 在 16 行中总和最高,所以我想消除 MT91 和 MT92

结果将是:

                             MT93           MT95
QC_G1                    95774.1359           24                  
QC_G2                    81479.29575          45
QC_G3                    87021.95427        42545
QC_G4                    95558.76738         425
QC_G5                    96780.77245        4545
QC_G6                    91854.35304         455
Ctr1                     128861.36163       2424
Ctr2                     101353.25927        344
Ctr3                     115683.73755       3434
Bti1                     112164.14229        444
Bti2                     0.00000            3443  
Bti3                     124806.49101       3434
Bti4                     109927.26425       1000
rt                          13.90586          13

请注意,向量是由将生成大量向量的程序生成的(我正在使用 for 循环),所以我不知道向量的长度,也不知道循环中变量的名称

如果您需要任何说明,请告诉我 谢谢

您可以尝试以下方法:

#library
library(tidyverse)

# example data
tibble(name=LETTERS[1:17],
       a=c(1:17),
       b=c(2:18),
       c=c(3:19)) -> df

df
#> # A tibble: 17 x 4
#>    name      a     b     c
#>    <chr> <int> <int> <int>
#>  1 A         1     2     3
#>  2 B         2     3     4
#>  3 C         3     4     5
#>  4 D         4     5     6
#>  5 E         5     6     7
#>  6 F         6     7     8
#>  7 G         7     8     9
#>  8 H         8     9    10
#>  9 I         9    10    11
#> 10 J        10    11    12
#> 11 K        11    12    13
#> 12 L        12    13    14
#> 13 M        13    14    15
#> 14 N        14    15    16
#> 15 O        15    16    17
#> 16 P        16    17    18
#> 17 Q        17    18    19

# example vector
vector <- c("a","b")


# solution
df %>%                 
   dplyr::select(all_of(vector)) %>% # select vector items
   slice(-17) %>% # remove 17 line
   map_dbl(sum) %>% # make sum
   which.max() %>% # select max
   names() -> selected # select max name


df %>% 
  dplyr::select(!vector,selected) # select columns
#> # A tibble: 17 x 3
#>    name      c     b
#>    <chr> <int> <int>
#>  1 A         3     2
#>  2 B         4     3
#>  3 C         5     4
#>  4 D         6     5
#>  5 E         7     6
#>  6 F         8     7
#>  7 G         9     8
#>  8 H        10     9
#>  9 I        11    10
#> 10 J        12    11
#> 11 K        13    12
#> 12 L        14    13
#> 13 M        15    14
#> 14 N        16    15
#> 15 O        17    16
#> 16 P        18    17
#> 17 Q        19    18

reprex package (v2.0.1)

于 2021-10-26 创建