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

R语言字符型数据的长格式处理、去重、赋值求和需求

R语言数据处理实现方案

先加载所需工具包:

library(tidyverse)

原始数据结构:

d <- structure(list(id = c(101, 101, 101, 101, 102, 102, 102, 103, 
                           103, 103, 103, 104), m = c("15 ag", "15 ag", NA, "12 cer", NA, 
                          "18 di", "12 cer", "11 dem", "11 dem", NA, "12 cer", "25 dia"
                           )), class = c("tbl_df", "tbl", "data.frame"),row.names =c(NA,-12L))

完整处理代码

result <- d %>%
  # 步骤1:数据已是长格式,直接过滤无效的NA值
  filter(!is.na(m)) %>%
  # 步骤2:按id和m去重,每个id的m值仅保留一条记录
  distinct(id, m, .keep_all = TRUE) %>%
  # 步骤3:为m列字符值匹配对应分数
  mutate(score = case_when(
    m == "15 ag" ~ 0,
    m == "12 cer" ~ 1,
    m == "18 di" ~ 6,
    m == "11 dem" ~ 2,
    m == "25 dia" ~ 0
  )) %>%
  # 步骤4:按id分组计算分数总和
  group_by(id) %>%
  summarise(sum_score = sum(score, na.rm = TRUE)) %>%
  ungroup()

# 查看最终结果
result

代码说明

  • 步骤1:原始数据本身就是长格式(每个id对应多行m记录),因此直接过滤m列的NA值(这类值无对应分数,无需保留)。
  • 步骤2:通过distinct()按id和m去重,确保每个id的每个有效m值仅保留一条记录。
  • 步骤3:用case_when()实现规则匹配,为每个m值分配对应分数,逻辑直观易修改。
  • 步骤4:按id分组后,用sum()计算分数总和,na.rm = TRUE避免因意外未匹配值导致总和出错。

运行结果

# A tibble: 4 × 2
     id sum_score
  <dbl>     <dbl>
1   101         1
2   102         7
3   103         3
4   104         0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 01:45:30