假设我有这种数据集
ds <- data.frame(group = c("A","B","C"),
value = rnorm(90,10,15))
现在,我想使用dplyr(或purrr +扫帚)将value变量“划分”为三列,如下图所示。
我尝试了pivot_wider,group_split和分离的方法,但是没有成功。
将来,我将使用这些变量来计算相关系数。我想留在整洁的环境中。谢谢
代码:
ds <- data.frame(group = c("A","B","C"),
value = rnorm(90,10,15))
也许这可以解决您的问题:
df <- unstack(ds,value~group)
根据要求插入tidyverse
上下文,pivot_wider
的问题在于存在重复的行标识符。按group
分组也不能解决该问题。我个人认为@Duck的解决方案是可行的,但是如果您真的想遵循tidyverse,则this注释提供了一种解决方法(this博客文章对此进行了更详细的讨论)。这个想法是用row_number()
添加唯一的行标识符,然后扩展数据:
ds %>%
group_by(group) %>%
mutate(grouped_id = row_number()) %>%
pivot_wider(names_from = group, values_from = value)
然后您可以根据需要删除或替换grouped_id
变量。