【发布时间】:2020-11-13 12:42:52
【问题描述】:
我的数据乱序,这意味着某些行需要向上或向下移动以匹配特定顺序。具有特定值的列反映了正确的顺序。这些值对应于属于无序列组的列。
由于有一个相互列,我正在寻找一种方法来在数据框中“内部”重新排序。有没有一种简单的方法可以在一个%>% 管道中使用tidyr 或dplyr?
示例
我让 3 个人按照 1 到 5 分来评价他们喜欢狗、猫或兔子的程度。每个人回答问题的顺序与其他人不同。
set.seed(2020)
df <- data.frame(respondent_id = c("ttt", "ttt", "ttt",
"xxx", "xxx", "xxx",
"zzz", "zzz", "zzz"),
animal = c("dog", "cat", "rabbit",
"dog", "cat", "rabbit",
"dog", "cat", "rabbit"),
rating = sample(1:5, size = 9, replace = TRUE),
order = c("cat", "rabbit", "dog",
"dog", "rabbit", "cat",
"rabbit", "cat", "dog"))
df
## respondent_id animal rating order
## 1 ttt dog 4 cat
## 2 ttt cat 4 rabbit
## 3 ttt rabbit 1 dog
## 4 xxx dog 1 dog
## 5 xxx cat 4 rabbit
## 6 xxx rabbit 2 cat
## 7 zzz dog 1 rabbit
## 8 zzz cat 5 cat
## 9 zzz rabbit 2 dog
-
animal和order列是对齐数据的基础。 - 当按
respondent_id分组时,我想将animal和rating列(一起)向上或向下移动,以便animal中的值与order中的值匹配。
期望的输出
respondent_id animal rating order
1 ttt cat 4 cat
2 ttt rabbit 1 rabbit
3 ttt dog 4 dog
4 xxx dog 1 dog
5 xxx rabbit 2 rabbit
6 xxx cat 4 cat
7 zzz rabbit 2 rabbit
8 zzz cat 5 cat
9 zzz dog 1 dog
【问题讨论】: