df1 <- data.frame(
name = c("a", "b", "b", "c"),
score = c(1, 1, 2, 1)
)
如何从df $ name获取包含变量/列的新数据框,并使用每个&#39;对应的&#39; df$score
。我认为它实际上是一个两步问题:
首先,我需要列出(在此示例中)不等长度向量的列表:
$a
[1] 1
$b
[1] 1 2
$c
[1] 1
其次,需要对NA进行填充,以便在制作所需数据帧之前获得相等长度的向量 那就像:
a b c
1 1 1 1
2 NA 2 NA
我找不到任何简单的方法来做到这一点 - 我相信一定有! 如果解决方案可以使用dplyr交付,那就太棒了!谢谢!
答案 0 :(得分:4)
分割数据:
(s <- split(df1$score, df1$name))
# $a
# [1] 1
#
# $b
# [1] 1 2
#
# $c
# [1] 1
创建新数据框:
as.data.frame(sapply(s, `length<-`, max(vapply(s, length, 1L))))
# a b c
# 1 1 1 1
# 2 NA 2 NA
使用vapply
代替sapply
len <- max(vapply(s, length, 1L))
as.data.frame(vapply(s, `length<-`, double(len), len))
# a b c
# 1 1 1 1
# 2 NA 2 NA