从长到宽,没有唯一键

Long to wide with no unique key

我有这个数据集:

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]

我不明白我在追求什么。

但我需要的是:

我该如何完成?

您的方法很接近,但是通过使所有行中的 Row 唯一,您可以保证这些行不会真正 "join" 您想要的方式。相反,在 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

你可以在 R 基础上做:

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}))