r - 将列表 A 中数据框中的最后一个值与列表 B 中数据框中的第一个值相加
问题描述
我有两个包含 500 个数据框的列表。这是两个列表的示例,每个列表包含 2 个数据帧。
l1
[[1]]
X1 X2 X3
1 1 0 0
2 5 1 8
[[2]]
X1 X2 X3
1 0 1 1
2 3 0 4
和
l2
[[1]]
X1 X2 X3
1 1 1 0
2 0 1 1
[[2]]
X1 X2 X3
1 0 1 0
2 0 1 1
我需要将数据框的一列中的最后一个值与不同列表中数据框的同一列的第一个值相加。例如:
l1[[1]]$x1[2] to l2[[1]]$x1[1] ; and l1[[1]]$x3[2] to l2[[1]]$x3[1]
在我的示例中,预期结果应记录在 l2 中包含的数据帧中,并且应如下所示:
> l2
[[1]]
X1 X2 X3
1 6 2 8
2 0 1 1
[[2]]
X1 X2 X3
1 3 1 4
2 0 1 1
我打算使用包含 500 个数据框的列表来执行此操作。我会更喜欢 Dplyr。
解决方案
尝试地图/映射:
# data
l1 <- list("X1 X2 X3
1 1 0 0
2 5 1 8",
"X1 X2 X3
1 0 1 1
2 3 0 4")
l1 <- lapply(l1, function(x) read.table(text = x, header = TRUE))
l2 <- list("X1 X2 X3
1 1 1 0
2 0 1 1",
"X1 X2 X3
1 0 1 0
2 0 1 1")
l2 <- lapply(l2, function(x) read.table(text =x, header = T))
# Map
Map(function(a, b) rbind(a[2, ] + b[1, ], b[2, ]), l1, l2)
# [[1]]
# X1 X2 X3
# 2 6 2 8
# 21 0 1 1
#
# [[2]]
# X1 X2 X3
# 2 3 1 4
# 21 0 1 1
或者:
library(tidyverse)
map2(l1, l2, ~bind_rows(.x %>%
slice(2) %>%
bind_rows(.y %>%
slice(1)) %>%
summarise_all(funs(sum)),
.y %>%
slice(2)))
推荐阅读
- r - 如何处理R中下载包'dplyr'的错误
- vb.net - 更改所选项目的背景颜色隐藏 ListView 复选框
- azure-pipelines - Azure Pipeline 如何在模板循环中读取库变量
- php - 如何在 Laravel 过去 30 天的愤怒中每天获得“付款”的总和
- sql - 如何在 PostgreSQL 中应用 CROSS JOIN?
- fipy - 一项取决于两个不同方程的两个变量的 FiPy 传输反应
- python - 多级饼图散景
- javascript - Chrome 调试:在节点内容值更改上放置 JS 断点
- google-sheets - Google表格不同的2个帐户之间的右键菜单
- apache-spark - Delta Table 是否非常适合不断变化的实体?