比较向量的元素并从向量中选择要在数据集中消除的元素
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 创建
我的目标是消除数据帧中的重复
我写了一个程序来确定第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 创建