我们要求人们在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 。 。
答案 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