我有一些如下数据:
num = list()
num[[1]] = c(1,2,3)
num[[2]] = c(4,5,6,7)
name = c("Alex", "Patrick")
Run Code Online (Sandbox Code Playgroud)
如何将其组合到一个看起来像这样的数据框?
Alex 1
Alex 2
Alex 3
Patrick 4
Patrick 5
Patrick 6
Patrick 7
Run Code Online (Sandbox Code Playgroud)
我很抱歉发布了一个很明显的问题.我已经广泛搜索并找不到答案,可能是因为我不知道如何很好地描述这个查询.
试一试.新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
Run Code Online (Sandbox Code Playgroud)
为了更好地理解这一点,让我们从内到外将它分解成几部分. lengths()告诉我们列表中每个元素的长度,所以我们有
lengths(num)
# [1] 3 4
Run Code Online (Sandbox Code Playgroud)
现在我们使用它作为times参数rep()来复制元素name.
rep(name, lengths(num))
# [1] "Alex" "Alex" "Alex" "Patrick" "Patrick" "Patrick" "Patrick"
Run Code Online (Sandbox Code Playgroud)
这是第一列.对于第二列,我们只需将其num转换为原子向量unlist().
unlist(num)
# [1] 1 2 3 4 5 6 7
Run Code Online (Sandbox Code Playgroud)
如上所示将这些放在一起,我们有了新的数据框.