You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R语言中为数据框数据点分配量化变量并按组求和的实现

嘿,这个需求在R里其实很好实现,我给你拆成生成分组数据框和按组求和两步来做,不管是用dplyr这类工具包还是基础R都能搞定,下面结合你的示例数据详细说明:


第一步:创建示例数据(先还原你的测试数据)

首先咱们先把你给的dat1创建出来,方便后续测试:

dat1 <- data.frame( 
  a = c(2.1,2.3,2.3), 
  b = c(3.6,3.7,3.8), 
  c = c(1.2,1.3,1.4), 
  d = c(2.4, 2.3, 3.2), 
  e = c(3.9, 1.2, 3.1)
)

第二步:生成分组数据框dat2

我们需要给每个数据点按规则分配1/2/3,这里推荐两种方法:

方法1:用dplyr的case_when(直观易懂)

如果习惯用tidyverse工具链,case_when能清晰写出分组逻辑,还能处理特殊情况(比如数值小于1的情况,这里我设为NA,你可以按需调整):

library(dplyr)

dat2 <- dat1 %>%
  mutate(across(everything(), ~case_when(
    .x >= 1 & .x < 2 ~ 1,   # 1-2之间(不含2)分配1
    .x >= 2 & .x < 3 ~ 2,   # 2-3之间(不含3)分配2
    .x >= 3 ~ 3,            # 大于等于3分配3
    TRUE ~ NA_real_         # 其他情况(比如小于1)设为NA
  )))

方法2:用基础R的ifelse嵌套(无需额外包)

如果不想加载dplyr,用基础R的嵌套ifelse也能实现同样效果:

dat2 <- as.data.frame(lapply(dat1, function(x) {
  ifelse(x >= 1 & x < 2, 1,
         ifelse(x >= 2 & x < 3, 2,
                ifelse(x >= 3, 3, NA)))
}))

生成的dat2会是这样的:

a b c d e
1  2 3 1 2 3
2  2 3 1 2 1
3  2 3 1 3 3

第三步:按组求和生成dat3

接下来要对原数据框dat1的每一行,按dat2的分组分别求和。这里推荐矩阵操作法,效率更高(尤其适合你80个变量的数据集):

# 把数据框转成矩阵,方便逐行运算
mat1 <- as.matrix(dat1)
mat2 <- as.matrix(dat2)

# 按组计算每行的总和
dat3 <- data.frame(
  group1_sum = rowSums(mat1 * (mat2 == 1), na.rm = TRUE),
  group2_sum = rowSums(mat1 * (mat2 == 2), na.rm = TRUE),
  group3_sum = rowSums(mat1 * (mat2 == 3), na.rm = TRUE)
)

如果你偏好dplyr风格,也可以用rowwise+summarize:

dat3 <- dat1 %>%
  rowwise() %>%
  summarize(
    group1_sum = sum(c_across(where(~dat2[cur_group_row(), cur_column()] == 1)), na.rm = TRUE),
    group2_sum = sum(c_across(where(~dat2[cur_group_row(), cur_column()] == 2)), na.rm = TRUE),
    group3_sum = sum(c_across(where(~dat2[cur_group_row(), cur_column()] == 3)), na.rm = TRUE)
  )

最终生成的dat3结果如下,完全符合你的需求:

group1_sum group2_sum group3_sum
1       1.20       4.50       7.50
2       2.50       4.60       3.70
3       1.40       2.30      10.10

内容的提问来源于stack exchange,提问作者Mataunited18

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:28:29