我有这个数据集:
VAR= c('X1','X1','X1','X1','X2','X2','X2','X3','X3','X3','X3','X3')
Ranking= c(1,2.5 ,2.5 ,1.5 ,1.5 ,NA, 1 ,NA ,NA ,1.5 ,1.5 ,3)
df<-data.frame(VAR,Ranking)
即使我添加了唯一标识符并传播
df$row <- 1:nrow(df)
df_wide<-spread(df, VAR, Ranking)
df_wide<-df_wide[,-1]
我不理解我的目标。
但我需要的是:
我如何做到这一点?
答案 0 :(得分:3)
你可以在R base做:
spl <- split(df, df$VAR)
n <- max(sapply(spl, nrow))
do.call(cbind, lapply(spl, function(x) {
x <- x[!is.na(x$Ranking),'Ranking']
length(x) <- n
x}))
答案 1 :(得分:1)
您的方法很接近,但是通过使Row
在所有行中都是唯一的,您可以保证这些行不会以您想要的方式“加入”。相反,将它们编号在VAR
内,然后传播:
library(dplyr)
library(tidyr)
group_by(df, VAR) %>%
mutate(Row = row_number()) %>%
ungroup() %>%
spread(VAR, Ranking)
# # A tibble: 5 × 4
# Row X1 X2 X3
# * <int> <dbl> <dbl> <dbl>
# 1 1 1.0 1.5 NA
# 2 2 2.5 NA NA
# 3 3 2.5 1.0 1.5
# 4 4 1.5 NA 1.5
# 5 5 NA NA 3.0