首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何调整R代码中没有特定列名的pivot_longer

如何调整R代码中没有特定列名的pivot_longer
EN

Stack Overflow用户
提问于 2022-07-20 17:38:11
回答 1查看 24关注 0票数 1

下面的代码在方法2、3和4与方法1之间进行了相关,选择了相关程度最高的方法。然而,我想要一些代码更改。

看我做了pivot_longer(cols = starts_with('METHOD'))。但是,我有一个示例(df2 dataframe),其中列不是以METHOD开头,而是随机名称,例如,列的顺序是:Alternatives, DISTANCE, TOPSIS, PROMETHE, VIKOR。因此,下面的代码对我的示例不再有效。如何调整这一点,即对两者都有效,我相信你需要调整这个pivot_longer问题。此外,我相信一定有一些代码比我做的短一些,以产生相同的预期结果。

代码语言:javascript
复制
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       5

df2

代码语言:javascript
复制
  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))
EN

Stack Overflow用户

回答已采纳

发布于 2022-07-20 17:41:03

基于带有'df‘的示例代码,pivot_longer使用数据集中的所有列,因此可以使用选择助手everything()

代码语言:javascript
复制
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      5
票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73056007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档