我有一个如下表,想根据 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] 删除。
我来说两句