【发布时间】:2018-04-24 23:33:05
【问题描述】:
这是我拥有的长格式数据示例:
ID value1 value2
1 4.333333 3.833333
1 4.333333 3.333333
2 4.583333 5.500000
2 3.916667 3.750000
3 4.500000 4.666667
3 4.333333 4.500000
我需要像这样将它转换为宽格式:
ID value1A value1B value2A value2B
1 4.333333 3.833333 4.333333 3.833333
2 4.333333 3.333333 4.333333 3.833333
3 4.583333 5.500000 4.333333 3.833333
为了使用整洁的诗句来实现这一点,我做了以下事情:
ds_spread <- gather(ds,condition, value, contains("value")) %>%
separate(condition, into = c("t1", "t2")) %>%
arrange(ID) %>%
group_by(ID) %>%
mutate(rownum = row_number()) %>%
select(-t1,-t2) %>%
spread(rownum, value)
我最终得到了我想要的结果。然而,这是偶然的吗?收集 %>% 分离 %>% 排列 %>% 变异 %>% 选择有必要吗?有没有更优雅的解决方案?
【问题讨论】:
-
这可能会有所帮助:stackoverflow.com/a/43966036/3358272
-
这看起来是一个好的开始。照原样,由于重复标识符错误,该解决方案不起作用。