返回前5名计算机

时间:2017-12-06 17:38:04

标签: r

我们要求人们在5台电脑中评价哪一款是他们最喜欢的。对于每个人,我想获得他们的前三名。

示例数据:

Apple <-         c(1,2,3,4,5)
Dell <-          c(2,1,4,3,3)
Samsung <-       c(3,5,1,2,4)
Acer <-          c(4,4,2,1,1)
ChromeBook <-    c(5,3,5,5,2)
RespondentID <-  c(1,2,3,4,5)
df <- data.frame(RespondentID,Apple, Dell, Samsung,Acer, ChromeBook)

我希望得到的是,对于每个受访者来说,前3台计算机是什么。

基本上,对于每一行,我如何返回前三名计算机的列名?

RespondentID FirstChoice第二选择ThirdChoice 1 Apple戴尔三星 2戴尔Apple Chromebook 。 。

1 个答案:

答案 0 :(得分:1)

您可以使用gather()spread()来更好地构建数据框架。

library(tidyverse)

df %>% gather(Computer, Rating, -RespondentID)

   RespondentID   Computer Rating
1             1      Apple      1
2             2      Apple      2
3             3      Apple      3
4             4      Apple      4
5             5      Apple      5
6             1       Dell      2
7             2       Dell      1
8             3       Dell      4
9             4       Dell      3
10            5       Dell      3

然后,您可以过滤到仅为3或更高的等级,然后将其传播回列。

df %>% 
    gather(Computer, Rating, -RespondentID) %>% 
    filter(Rating >= 3) %>% 
    spread(Rating, Computer) %>%
    select(RespondentID, 
           FirstChoice = `5`, 
           SecondChoice = `4`, 
           ThirdChoice = `3`)

  RespondentID FirstChoice SecondChoice ThirdChoice
1            1  ChromeBook         Acer     Samsung
2            2     Samsung         Acer  ChromeBook
3            3  ChromeBook         Dell       Apple
4            4  ChromeBook        Apple        Dell
5            5       Apple      Samsung        Dell