r - 展开数据框并添加来自另一个数据框的行和
问题描述
由于我的实际数据集非常大,我正在尝试找到一种更快的方法来完成以下代码。我想完全摆脱 for 循环。我正在尝试xdf
根据中的列数将每一行复制到一个新的数据框中values
。然后,在新数据集中的每个条目旁边,显示从第 1 列values
到第1 列的行总和j
。
xdf <- data_frame(
x = c('a', 'b', 'c'),
y = c(4, 5, 6),
)
values <- data_frame(
col_1 = c(5, 9, 1),
col_2 = c(4, 7, 6),
col_3 = c(1, 5, 2),
col_4 = c(7, 8, 5)
)
for (j in seq(ncol(values))){
if (j==1){
Temp <- cbind(xdf, z= rowSums(values[1:j]))
}
else{
Temp <- rbind(Temp, cbind(xdf, z= rowSums(values[1:j])))
}
}
print(Temp)
输出应该是:
x y z
1 a 4 5
2 b 5 9
3 c 6 1
4 a 4 9
5 b 5 16
6 c 6 7
7 a 4 10
8 b 5 21
9 c 6 9
10 a 4 17
11 b 5 29
12 c 6 14
有没有更短的方法来完成这个?
这是我能得到的最接近的答案。 如何根据值扩展数据框?
我是 R 新手,很抱歉冗长的代码。
解决方案
这是一个基本的 R 选项:
重复 中的行,xdf
因为 中的列数values
,迭代地一次增加一列以查找rowSums
并将其添加为最终数据框中的新列。
newdf <- xdf[rep(seq(nrow(xdf)), ncol(values)), ]
newdf$z <- c(sapply(seq(ncol(values)), function(x) rowSums(values[1:x])))
newdf
# A tibble: 12 x 3
# x y z
# <chr> <dbl> <dbl>
# 1 a 4 5
# 2 b 5 9
# 3 c 6 1
# 4 a 4 9
# 5 b 5 16
# 6 c 6 7
# 7 a 4 10
# 8 b 5 21
# 9 c 6 9
#10 a 4 17
#11 b 5 29
#12 c 6 14
@sindri_baldur 建议的简洁单行不需要明确重复行。
cbind(xdf, z = c(sapply(seq(ncol(values)), function(x) rowSums(values[1:x]))))
推荐阅读
- reactjs - 路由在除 / 之外的所有路由上的 apache 服务器上返回 404
- php - 显示类别编号(或列号)
- bash - 如何在菜单中选择多个文件并使用 ksh/bash 将其传递给子菜单
- selenium - Selenium 无法通过 docker-compose run 访问 docker 容器
- ios - 消息线程`MessageKit`swift的左对齐
- bash - 通过 ssh 从 bash 文件将文本输入到 docker 容器中
- hibernate - JPA / Hibernate 实体响应缺少一列
- flutter - 如何在颤动中多次推送和弹出单个页面?
- python-3.x - 密码提示在 python 代码中不可见
- amazon-web-services - 如何在用户数据中运行多个 PowerShell 命令并重新启动?