我有以下数据:
$("#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")
我很抱歉发布了一个很明显的问题。我已经广泛搜索并找不到答案,可能是因为我不知道如何很好地描述这个查询。
答案 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