将列表与R中的向量组合

时间:2016-06-03 20:43:42

标签: r

我有以下数据:

$("#cloned-items tbody").off().on('click',"button",function(){handleButton(this)});

如何将其组合成一个看起来像这样的数据框?

num = list()
num[[1]] = c(1,2,3)
num[[2]] = c(4,5,6,7)
name = c("Alex", "Patrick")

我很抱歉发布了一个很明显的问题。我已经广泛搜索并找不到答案,可能是因为我不知道如何很好地描述这个查询。

3 个答案:

答案 0 :(得分:8)

试一试。新的lengths()功能在这里派上用场。

data.frame(name = rep(name, lengths(num)), num = unlist(num))
#      name num
# 1    Alex   1
# 2    Alex   2
# 3    Alex   3
# 4 Patrick   4
# 5 Patrick   5
# 6 Patrick   6
# 7 Patrick   7

为了更好地理解这一点,让我们从内到外将它分解成几部分。 lengths()告诉我们列表中每个元素的长度,所以我们有

lengths(num)
# [1] 3 4

现在我们将其用作times中的rep()参数来复制name的元素。

rep(name, lengths(num))
# [1] "Alex"    "Alex"    "Alex"    "Patrick" "Patrick" "Patrick" "Patrick"

这是第一列。对于第二列,我们只需将num转换为带有unlist()的原子向量。

unlist(num)
# [1] 1 2 3 4 5 6 7

如上所示将这些放在一起,我们有了新的数据框。

答案 1 :(得分:3)

另一种选择:

data.table::rbindlist(Map(function(x,y) data.frame(name = x, num = y), name, num))
      name num
1:    Alex   1
2:    Alex   2
3:    Alex   3
4: Patrick   4
5: Patrick   5
6: Patrick   6
7: Patrick   7

答案 2 :(得分:2)

或者我们可以在使用'name'设置'{1}}'num'之后使用stack

names

注意到这是由@ user20650在评论中发布的。在这种情况下,我们也可以做

stack(setNames(num, name))[2:1]
#      ind values
#1    Alex      1
#2    Alex      2
#3    Alex      3
#4 Patrick      4
#5 Patrick      5
#6 Patrick      6
#7 Patrick      7