下面的代码在方法2、3和4与方法1之间进行了相关,选择了相关程度最高的方法。然而,我想要一些代码更改。
看我做了pivot_longer(cols = starts_with('METHOD'))。但是,我有一个示例(df2 dataframe),其中列不是以METHOD开头,而是随机名称,例如,列的顺序是:Alternatives, DISTANCE, TOPSIS, PROMETHE, VIKOR。因此,下面的代码对我的示例不再有效。如何调整这一点,即对两者都有效,我相信你需要调整这个pivot_longer问题。此外,我相信一定有一些代码比我做的短一些,以产生相同的预期结果。
df<-structure(list(Alternatives = c(3, 4, 5, 6, 7, 8, 9, 10, 11, 12),
METHOD1 = c(1L, 10L, 7L, 8L, 9L, 6L, 5L, 3L, 4L, 2L), METHOD2 = c(1L,
8L, 7L, 6L, 10L, 9L, 4L, 3L, 2L, 5L), METHOD3 = c(1L, 10L,
7L, 8L, 9L, 6L, 4L, 2L, 3L, 5L), METHOD4 = c(1, 9, 7, 6, 10,
8, 5, 4, 3, 2)), class = "data.frame", row.names = c(NA,
-10L))
Alternatives METHOD1 METHOD2 METHOD3 METHOD4
1 3 1 1 1 1
2 4 10 8 10 9
3 5 7 7 7 7
4 6 8 6 8 6
5 7 9 10 9 10
6 8 6 9 6 8
7 9 5 4 4 5
8 10 3 3 2 4
9 11 4 2 3 3
10 12 2 5 5 2
df %>%
summarise(across(METHOD2:METHOD4, ~cor.test(., METHOD1, method = "spearman")$estimate)) %>%
as.data.frame() %>%
pivot_longer(cols = starts_with('METHOD')) %>%
slice_head(n=1) %>%
slice_max(value) %>%
pull(name)-> selected_method
df[(colnames(df) %in% c(selected_method))]
METHOD2
1 1
2 8
3 7
4 6
5 10
6 9
7 4
8 3
9 2
10 5df2
df2<-structure(list(Alternatives = c(3, 4, 5, 6, 7, 8, 9, 10, 11, 12),
DISTANCE = c(1L, 10L, 7L, 8L, 9L, 6L, 5L, 3L, 4L, 2L), TOPSIS = c(1L,
8L, 7L, 6L, 10L, 9L, 4L, 3L, 2L, 5L), PROMETHE = c(1L, 10L,
7L, 8L, 9L, 6L, 4L, 2L, 3L, 5L), VIKOR = c(1, 9, 7, 6, 10,
8, 5, 4, 3, 2)), class = "data.frame", row.names = c(NA,
-10L))发布于 2022-07-20 17:41:03
基于带有'df‘的示例代码,pivot_longer使用数据集中的所有列,因此可以使用选择助手everything()。
library(dplyr)
library(tidyr)
df2 %>%
summarise(across(TOPSIS:VIKOR, ~cor.test(., DISTANCE,
method = "spearman")$estimate)) %>%
pivot_longer(cols = everything()) %>%
slice_head(n=1) %>%
slice_max(value) %>%
pull(name) %>%
select(df2, .)
TOPSIS
1 1
2 8
3 7
4 6
5 10
6 9
7 4
8 3
9 2
10 5https://stackoverflow.com/questions/73056007
复制相似问题