R:使用来自一个变量的值作为新变量来更改数据帧结构

时间:2014-11-23 20:55:38

标签: r list data-structures dataframe dplyr

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交付,那就太棒了!谢谢!

1 个答案:

答案 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