r - 通过绑定元素从两个列表到一个列表
问题描述
我有两个列表,每个列表有两个元素,
l1 <- list(data.table(id=1:5, group=1), data.table(id=1:5, group=1))
l2 <- list(data.table(id=1:5, group=2), data.table(id=1:5, group=2))
我想要rbind(.)
两个元素,从而产生一个包含两个元素的新列表。
> l
[[1]]
id group
1: 1 1
2: 2 1
3: 3 1
4: 4 1
5: 5 1
6: 1 2
7: 2 2
8: 3 2
9: 4 2
10: 5 2
[[2]]
id group
1: 1 1
2: 2 1
3: 3 1
4: 4 1
5: 5 1
6: 1 2
7: 2 2
8: 3 2
9: 4 2
10: 5 2
但是,我只找到rbind(.)
应用于跨元素绑定的示例。我怀疑解决方案在某处,lapply(.)
但lapply(c(l1,l2),rbind)
似乎绑定了列表,产生了一个包含四个元素的列表。
解决方案
您可以使用mapply
或Map
。mapply
(代表多元应用)将提供的函数应用于参数的第一个元素,然后是第二个元素,然后是第三个元素,依此类推。Map
从字面上看,它是一个包装器mapply
,它不会尝试简化结果(尝试在有和没有 SIMPLIFY=T 的情况下运行 mapply)。简而言之,参数会根据需要循环使用。
mapply(x=l1, y=l2, function(x,y) rbind(x,y), SIMPLIFY = F)
#[[1]]
# id group
# 1: 1 1
# 2: 2 1
# 3: 3 1
# 4: 4 1
# 5: 5 1
# 6: 1 2
# 7: 2 2
# 8: 3 2
# 9: 4 2
#10: 5 2
#
#[[2]]
# id group
# 1: 1 1
# 2: 2 1
# 3: 3 1
# 4: 4 1
# 5: 5 1
# 6: 1 2
# 7: 2 2
# 8: 3 2
# 9: 4 2
#10: 5 2
正如@Parfait 指出的那样,您可以这样做Map
:
Map(rbind, l1, l2)
#[[1]]
# id group
# 1: 1 1
# 2: 2 1
# 3: 3 1
# 4: 4 1
# 5: 5 1
# 6: 1 2
# 7: 2 2
# 8: 3 2
# 9: 4 2
#10: 5 2
#
#[[2]]
# id group
# 1: 1 1
# 2: 2 1
# 3: 3 1
# 4: 4 1
# 5: 5 1
# 6: 1 2
# 7: 2 2
# 8: 3 2
# 9: 4 2
#10: 5 2
推荐阅读
- qt - 通过 qtquickcontrols2-configuration 更改控件类型样式?
- php - 编辑表单忽略验证注释
- python - UnboundLocalError:分配前引用的局部变量“state_claim_ratio_df”
- xamarin - 使用 MvvmCross 在 Xamarin 表单中根据用户输入显示自定义字段
- powershell - PowerShell中密码的RegEx验证
- node.js - PhpStorm/WebStorm 终端显示旧 NPM 版本
- c# - 如何删除默认的 ASP.NET Core Identity 端点?
- selenium - 虽然 Xpath 可用,但会抛出 element not found 错误
- c# - 如果按钮在列表中,则更改按钮
- csv - sqlite3 导入带有列和行分隔符的 csv