重复列a进入新行

时间:2019-07-31 11:40:11

标签: r spread

我在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()查看回溯

3 个答案:

答案 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)