根据 R 中 DF 中匹配的行值获取列名(超过 3 个列名)

甘巴瓦

我有一个如下表,想根据 R studio 中的行值创建建议。

这就是我所拥有的:

ID 一种 C D F G
一种 0.98 0.48 0.21 0.97 0.47 0.20 0.19
0.22 0.31 0.41 0.11 0.42 0.32 0.23
C 0.70 0.81 0.61 0.21 0.82 0.71 0.62

我想要 top1 top2.. top7 的列名称。

ID 一种 C D F G 顶级名 顶名 前三名 前四名 前五名 顶6名 前七名
一种 0.98 0.48 0.21 0.97 0.47 0.20 0.19 一种 D C F G
0.22 0.31 0.41 0.11 0.42 0.32 0.23 C F G 一种 D
C 0.70 0.81 0.61 0.21 0.82 0.71 0.62 F 一种 G C D
瑞安·约翰

有一个更好的解决方案可以通过使用来解决 - 有人很快就会发布该答案。

library(tidyverse)

df <- tibble::tribble(
  ~id,   ~A,   ~B,   ~C,   ~D,   ~E,   ~F,   ~G,
  "A", 0.98, 0.48, 0.21, 0.97, 0.47,  0.2, 0.19,
  "B", 0.22, 0.31, 0.41, 0.11, 0.42, 0.32, 0.23,
  "C",  0.7, 0.81, 0.61, 0.21, 0.82, 0.71, 0.62
  )

df %>% left_join (df %>% 
  pivot_longer(cols = A:G,
               names_to = "letters",
               values_to = "values") %>% 
  group_by(id) %>% 
  mutate(rank = dense_rank(desc(values))) %>% 
  arrange(id, rank) %>% 
  mutate(rank = glue::glue("top{rank}name") %>% as.character()) %>% 
  select(id, rank, letters) %>% 
  pivot_wider(names_from = "rank", values_from = "letters")
)
#> Joining, by = "id"
#> # A tibble: 3 x 15
#>   id        A     B     C     D     E     F     G top1name top2name top3name
#>   <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>    <chr>    <chr>   
#> 1 A      0.98  0.48  0.21  0.97  0.47  0.2   0.19 A        D        B       
#> 2 B      0.22  0.31  0.41  0.11  0.42  0.32  0.23 E        C        F       
#> 3 C      0.7   0.81  0.61  0.21  0.82  0.71  0.62 E        B        F       
#> # ... with 4 more variables: top4name <chr>, top5name <chr>, top6name <chr>,
#> #   top7name <chr>

reprex 包(v1.0.0)于 2021 年 8 月 16 日创建

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据R中DF中匹配的行值获取列名

R:根据R中的列名获取行值

R:根据R中的行值获取列名

根据df1中的列值在df2中查找相交的值,并使用df1中的检索值创建新列(不匹配的列名)

选择最高的 3 个值并返回 R 中的行和列名称

选择特定的列,其中列名在r中的另一个df中

MySQL查询-根据不同表中的列名获取行值

R根据列名称匹配选择列中的NA

根据R中另一个向量的索引更改df列中的值

当DF在R中具有2个相似的列名称时,选择1列

返回行中3个最大值的列名称

如何根据R中的列名绘制一行

根据 df.query 条件获取列名

如何根据R中的另一个数据框更改列名?

根据其他条件,在第二个 df 中超过一个 df 中的值的次数

Python根据另一个数据框中的列值匹配列名

多个条件使用 df 中的元素匹配查找表中的列名以合并 3 个数据帧

根据第三个 df3 比较 df1 和 df2 列中的数据,并从 df2 最后一列获取匹配行数据的数据

根据匹配条件从两个 DF 中减去列

根据列名称中的匹配值和R中的特定列创建0-1数据框

仅选择列名与其他 df 行中的值匹配的列

根据 R 中第二个 df 的条件求平均值

将DF上的行用作另一个DF中的新列名称

假设我不知道数据框中的列名,如何根据该列中的值对df排序?

根据R中df1和df2之间的匹配在df1中添加新列

在Pandas df行中查找值并返回列名

根据规则均衡R中3个向量的长度

在df中重组列名称

Pandas:如何根据行值从一个 df 中获取列标签,并将它们分配为新 df 中的行值?