我有以下数据框
MyData = data.frame(
id = 1:2,
choice = factor(c('red', 'blue')),
grade = c(60, 70))
id choice grade
1 1 red 60
2 2 blue 70
我想根据“选择”的级别重复每一行。因此,对于变量“选择”的每个级别,行应重复一次。因此,我需要一行用于“蓝色”级别,另一行用于“红色”级别。如下:
id choice grade
1 1 blue 60
2 1 red 60
3 2 blue 70
4 2 red 70
我看了几个关于stackoverflow的问题,但是通常,人们希望根据某个因素删除重复项,而不是创建它们。 知道怎么做吗?基于tidyr / dplyr的解决方案将不胜感激。
答案 0 :(得分:1)
我们可以使用levels(choice)
来获取所有级别,然后执行separate_rows
library(dplyr)
library(tidyr)
mutate(MyData, choice=toString(levels(choice))) %>% separate_rows(choice)
id choice grade
1 1 blue 60
2 1 red 60
3 2 blue 70
4 2 red 70
答案 1 :(得分:1)
这是dplyr&tidyr方法:
library(dplyr); library(tidyr)
MyData %>%
group_by(id) %>%
complete(choice, grade)
# id choice grade
# <int> <fct> <dbl>
#1 1 blue 60
#2 1 red 60
#3 2 blue 70
#4 2 red 70
答案 2 :(得分:1)
以下是一些与R expand.grid()
一起使用的情况:
library(dplyr)
with(MyData, expand.grid(id = id, choice = choice)) %>%
left_join(
y = MyData %>% select(id, grade),
by = "id"
)
id choice grade
1 1 red 60
2 2 red 70
3 1 blue 60
4 2 blue 70