R 将长格式改为宽格式,删除一些行
我有5列的数据框,我想把一些列从长格式转换成宽格式 我尝试过重塑和tidyverse,可以接近,但转换时会丢失一些行。我有以下代码: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',
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