如何在R中对数据集price变量的相邻成对行计算平方差?
R语言计算成对行的price差值平方
问题说明
现有数据集test,需计算price变量中第1与第2行、第3与第4行、第5与第6行的差值平方,最终生成仅含price_diff列的diff.data数据集。
原始数据集
test <- data.frame(id = c(6, 16, 26, 36, 46, 56), house = c(1, 5, 10, 23, 25, 27), price = c(79, 84, 36, 34, 21, 12))
期望输出
diff.data <- data.frame(price_diff = c(25, 4, 81))
解决方法
方法1:直接索引提取(符合你的尝试方向)
直接按奇偶行拆分price列,计算差值平方:
# 提取奇数行的price值(第1、3、5行) odd_prices <- test$price[seq(1, nrow(test), 2)] # 提取偶数行的price值(第2、4、6行) even_prices <- test$price[seq(2, nrow(test), 2)] # 计算差值平方并生成目标数据集 diff.data <- data.frame(price_diff = (even_prices - odd_prices)^2)
方法2:分组处理(通用型)
如果后续数据集行数可能变化,用分组逻辑更灵活:
# 给每2行添加一个分组标识 test$group <- rep(1:(nrow(test)/2), each = 2) # 按分组计算每组内第2行减第1行的平方值 diff.data <- aggregate(price ~ group, data = test, function(x) (x[2] - x[1])^2) # 整理成目标格式 diff.data <- data.frame(price_diff = diff.data$price)
方法3:dplyr包实现(简洁高效)
用dplyr的分组聚合功能快速完成:
library(dplyr) diff.data <- test %>% # 生成分组标识 mutate(group = rep(1:(nrow(.)/2), each = 2)) %>% # 按分组计算差值平方 group_by(group) %>% summarise(price_diff = (price[2] - price[1])^2) %>% # 取消分组并保留目标列 ungroup() %>% select(price_diff)
内容的提问来源于stack exchange,提问作者four77
相关产品推荐
相关产品推荐

