我在a列中有重复的值,我希望这些值成为包含b列中的信息的新行。
我已经尝试过tidyr函数来进行收集和传播
library("tidyr")
rearrangeddf<-spread(df,a,b)
#Input
a=c("A","A","A","A","A","B","B","B","B","B")
b=c(1,2,3,4,5,11,12,13214634,14,15432)
df=data.frame(a,b)
#Output
x=c("A",1,2,3,4,5)
y=c("B",11,12,13214634,14,1543)
rearrangeddf=rbind(x,y)
错误:输出的每一行必须由键的唯一组合标识。 密钥共享10行: * 1,2,3,4,5 * 6,7,8,9,10 您是否需要使用tibble :: rowid_to_column()创建唯一的ID? 致电
rlang::last_error()
查看回溯
答案 0 :(得分:2)
您可以使用
]]>
不属于答案
请勿使用aggregate(b~a, df, c)
a b.1 b.2 b.3 b.4 b.5
1 A 1 2 3 4 5
2 B 11 12 13214634 14 15432
,因为这将覆盖c=c("A",1,2,3,4,5)
函数。看到这里:
c()
答案 1 :(得分:1)
您可以这样做:
df <- data.frame(a=c("A","A","A","A","A","B","B","B","B","B"),
b=c(1,2,3,4,5,11,12,13214634,14,15432))
t(unstack(df, b ~ a))
# > t(unstack(df, b ~ a))
# [,1] [,2] [,3] [,4] [,5]
# A 1 2 3 4 5
# B 11 12 13214634 14 15432
答案 2 :(得分:0)
感谢@Sotos,效果很好
library(dplyr)
library(tidyr)
df %>%group_by(a) %>% mutate(new = row_number()) %>% spread(new, b)