如何在R语言DataFrame中计算每行与后续各行的peri值对应之和?
实现DataFrame中每行peri与后续行peri的两两求和
先确认下你的原始数据(注意你代码里写的rock[1:3,c("area","peri")]应该是笔误,实际输出有4行,所以修正为rock[1:4,c("area","peri")]):
myData <- rock[1:4,c("area","peri")] print(myData)
输出:
area peri 1 4990 2791.90 2 7002 3892.60 3 7558 3930.66 4 7352 3869.32
要实现每行peri和后续所有行peri相加,同时输出对应的两个area值,这里有两种简洁的实现方法:
方法一:用expand.grid筛选配对
先生成所有行索引的配对,再筛选出“前面行+后续行”的组合:
# 生成所有行索引的配对 row_pairs <- expand.grid(row1 = 1:nrow(myData), row2 = 1:nrow(myData)) # 只保留row1 < row2的配对,也就是前面行和后续行的组合 row_pairs <- row_pairs[row_pairs$row1 < row_pairs$row2, ] # 构建结果数据框,提取对应area并计算peri之和 result <- data.frame( area1 = myData$area[row_pairs$row1], area2 = myData$area[row_pairs$row2], periSUM = myData$peri[row_pairs$row1] + myData$peri[row_pairs$row2] ) print(result)
方法二:用combn直接生成组合(更简洁)
combn函数专门用来生成元素的所有不重复组合,完美适配这个场景:
# 生成所有2行的索引组合,自动按row1 < row2的顺序输出 row_combs <- combn(1:nrow(myData), 2) # 构建结果数据框 result <- data.frame( area1 = myData$area[row_combs[1, ]], area2 = myData$area[row_combs[2, ]], periSUM = myData$peri[row_combs[1, ]] + myData$peri[row_combs[2, ]] ) print(result)
两种方法运行后都会得到你想要的结果:
area1 area2 periSUM 1 4990 7002 6684.50 2 4990 7558 6722.56 3 4990 7352 6661.22 4 7002 7558 7823.26 5 7002 7352 7761.92 6 7558 7352 7799.98
内容的提问来源于stack exchange,提问作者nexonvantec
相关产品推荐
相关产品推荐

