我有一个数据集,按名称记录各种指标的值。我想为每个名称对这些度量标准进行排序,并使用它们创建一个包含每个选项列的新数据集。我有它可以排序行,但我不想要值,我想要指标的名称......
如何获取列名来填充单元格而不是值?
name <- c('jim', 'sal', 'xiu')
x <- c(100, 200, 100)
y <- c(300, 100, 300)
z <- c(400, 0, 200)
have <- data.frame(name, x, y, z)
choice1 <- c('z', 'x', 'y')
choice2 <- c('y', 'y', 'z')
choice3 <- c('x', 'z', 'x')
want <- data.frame(name, choice1, choice2, choice3)
attempt <- data.frame(t(apply(have, 1, sort, decreasing = TRUE)))
答案 0 :(得分:1)
以下是使用dplyr
工具的方法:
library(dplyr)
library(tidyr)
library(reshape2)
have %>%
# convert from wide to long format
gather(metric, value,
-name) %>%
group_by(name) %>%
# arrange each group in descending order
arrange(desc(value)) %>%
# with data arranged, the row number coincides with the ranking
mutate(rank = sprintf("choice%s", row_number())) %>%
# recast to wide format
dcast(name ~ rank,
value.var = "metric")
答案 1 :(得分:1)
这里的解决方案只依赖于tidyverse。
library(tidyverse)
want <- have %>% group_by(name) %>% gather(var, value, 2:4) %>%
arrange(name, desc(value)) %>% mutate(choice = paste0("choice", row_number())) %>%
select(-value) %>%
spread(choice, var)