R 展开数据帧并从另一个数据帧添加行和
由于我的实际数据集非常大,我正在尝试找到一种更快的方法来完成以下代码。我想彻底摆脱for循环。我试图根据R 展开数据帧并从另一个数据帧添加行和,r,dataframe,tidyverse,R,Dataframe,Tidyverse,由于我的实际数据集非常大,我正在尝试找到一种更快的方法来完成以下代码。我想彻底摆脱for循环。我试图根据值中的列数将xdf中的每一行复制到一个新的数据帧中。然后,在新数据集中的每个条目旁边,显示从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
值中的列数将xdf
中的每一行复制到一个新的数据帧中。然后,在新数据集中的每个条目旁边,显示从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)
有没有较短的方法来实现这一点
这是我能得到的最接近的答案。
我是R新手,很抱歉代码冗长。这里有一个基本R选项:
重复xdf
中的行,因为值中有许多列
,一次迭代递增一列,以查找行和
,并将其作为新列添加到最终数据帧中
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
您可以保存第一步,并使用循环cbind(xdf,z=c(sapply(seq(ncol(values)),函数(x)行和(values[1:x]))
。
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
cbind(xdf, z = c(sapply(seq(ncol(values)), function(x) rowSums(values[1:x]))))