R 将长格式改为宽格式,删除一些行

R 将长格式改为宽格式,删除一些行,r,reshape,R,Reshape,我有5列的数据框,我想把一些列从长格式转换成宽格式 我尝试过重塑和tidyverse,可以接近,但转换时会丢失一些行。我有以下代码: A<- c(30, 32, 32, 32, 35, 35, 35) B<- c('x', 'y', 'y', 'y', 'z', 'z', 'z') C<- c('g', 'g', 'g', 'g', 'g', 'g', 'g') sp<- c('cr', 'cr',

我有5列的数据框,我想把一些列从长格式转换成宽格式

我尝试过重塑和tidyverse,可以接近,但转换时会丢失一些行。我有以下代码:

A<- c(30,   32, 32, 32, 35, 35, 35)
B<- c('x',  'y',    'y',    'y',    'z',    'z',    'z')
C<- c('g',  'g',    'g',    'g',    'g',    'g',    'g')
sp<-    c('cr', 'cr',   'cr',   'cr',   'au',   'au',   'au')
tl<-    c(29,   36, 44, 40, 48, 54, 53)
test<-data.frame(A,B,C,sp,tl)
test$A<-as.factor(test$A)
我想:

A   B   C   cr  au
30  x   g   29  
32  y   g   36  
32  y   g   44  
32  y   g   40  
35  z   g       48
35  z   g       54
35  z   g       53
我试过了

   wideT<-reshape(test, idvar = c("A","B","C"), timevar = "sp", direction 
= "wide")

wideT我们需要创建一个按“a”、“B”、“C”分组的序列列,然后在
重塑的
id.var
中添加列名

test$ind <- with(test, ave(seq_along(A), A, B, C, FUN = seq_along))
reshape(test, idvar = c("A","B","C", "ind"), timevar = "sp",
   direction  = "wide")[-4]
#    A B C tl.cr tl.au
#1 30 x g    29    NA
#2 32 y g    36    NA
#3 32 y g    44    NA
#4 32 y g    40    NA
#5 35 z g    NA    48
#6 35 z g    NA    54
#7 35 z g    NA    53

我们需要一个序列列。尝试使用
tidyverse
test%%>%groupby(A,B,C)%%>%mutate(rn=row\u number())%%>%spread(sp,tl)
test$ind <- with(test, ave(seq_along(A), A, B, C, FUN = seq_along))
reshape(test, idvar = c("A","B","C", "ind"), timevar = "sp",
   direction  = "wide")[-4]
#    A B C tl.cr tl.au
#1 30 x g    29    NA
#2 32 y g    36    NA
#3 32 y g    44    NA
#4 32 y g    40    NA
#5 35 z g    NA    48
#6 35 z g    NA    54
#7 35 z g    NA    53
library(tidyverse)
test %>%
    group_by(A, B, C) %>% 
    mutate(rn = row_number()) %>% 
    spread(sp, tl) %>%
    select(-rn)
# A tibble: 7 x 5
# Groups:   A, B, C [9]
#  A     B     C        au    cr
#  <fct> <fct> <fct> <dbl> <dbl>
#1 30    x     g        NA    29
#2 32    y     g        NA    36
#3 32    y     g        NA    44
#4 32    y     g        NA    40
#5 35    z     g        48    NA
#6 35    z     g        54    NA
#7 35    z     g        53    NA