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

如何识别分组内变量存在非NA不同值的个体?

找出个体多观测中存在冲突的变量

核心思路

通过将宽表转为长格式,按个体(Ind)和变量(V1/V2/V3)分组,统计每组内非NA值的唯一数量,筛选出数量大于1的组,即可定位存在冲突的个体和变量。

解决代码

library(tidyverse)

# 样例数据
df <- data.frame(Ind=c("C","C","C","B","B"),
                 V1 = c("a",NA,"b","a",NA),
                 V2 = c("b","b",NA,"a","a"),
                 V3 = c(NA,"a","a",NA,"b"),
                 obs.id = c(1,2,3,4,5))

# 定位冲突的个体与变量
conflict_summary <- df %>%
  pivot_longer(cols = starts_with("V"), names_to = "Variable", values_to = "Value") %>%
  filter(!is.na(Value)) %>%
  group_by(Ind, Variable) %>%
  summarise(
    唯一值列表 = list(unique(Value)),
    唯一值数量 = n_distinct(Value),
    .groups = "drop"
  ) %>%
  filter(唯一值数量 > 1)

# 查看结果
conflict_summary

结果说明

运行后会输出存在冲突的记录,示例结果如下:

# A tibble: 1 × 4
  Ind   Variable 唯一值列表 唯一值数量
  <chr> <chr>    <list>          <int>
1 C     V1       <chr [2]>           2

清晰展示了Ind=C的V1变量存在2个不同的非NA值。

查看冲突的原始观测细节

如果需要查看冲突对应的具体原始数据,可以用以下代码:

df %>%
  pivot_longer(cols = starts_with("V"), names_to = "Variable", values_to = "Value") %>%
  filter(!is.na(Value)) %>%
  inner_join(conflict_summary %>% select(Ind, Variable), by = c("Ind", "Variable")) %>%
  arrange(Ind, Variable)

输出结果会列出所有冲突的原始观测:

# A tibble: 2 × 4
  Ind   obs.id Variable Value
  <chr>  <dbl> <chr>    <chr>
1 C          1 V1       a    
2 C          3 V1       b    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 18:42:37