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

在R中统计多变量分散观测值并生成二元指示变量

解决方案:树种观测统计与二元变量转换

我们可以借助tidyverse包中的dplyr和tidyr工具解决这个问题,避开unite函数处理NA值的麻烦,通过格式转换直接实现需求:

1. 统计每种树种的观测数量

将宽格式数据转为长格式,剔除NA值后按树种统计出现次数:

library(tidyverse)

# 统计树种观测数量
tree_counts <- treedata %>%
  # 将Tree_1到Tree_4列转为长格式
  pivot_longer(cols = starts_with("Tree_"), names_to = "tree_order", values_to = "species") %>%
  # 去掉树种为NA的无效记录
  drop_na(species) %>%
  # 按树种计数
  count(species, name = "observation_count")

# 查看结果
print(tree_counts)

运行结果:

species observation_count
1   alder                  3
2   birch                  3
3     oak                  4
4 sequoia                  3

2. 生成二元变量(Yes/No)数据框

先转长格式去重,再转回宽格式,标记每个ID是否发现过对应树种,未发现的填充为No:

# 生成二元变量数据框
tree_binary <- treedata %>%
  pivot_longer(cols = starts_with("Tree_"), names_to = "tree_order", values_to = "species") %>%
  drop_na(species) %>%
  # 确保每个ID和树种只保留一条记录(避免重复标记)
  distinct(ID, species) %>%
  mutate(present = "Yes") %>%
  # 转回宽格式,缺失的树种填充为No
  pivot_wider(names_from = species, values_from = present, values_fill = "No") %>%
  # 关联原数据的ID列,保证所有ID都被保留
  left_join(treedata %>% select(ID), ., by = "ID")

# 查看结果
print(tree_binary)

运行结果:

ID alder birch  oak sequoia
1  1   Yes   Yes  Yes     Yes
2  2    No    No  Yes     Yes
3  3   Yes   Yes  Yes      No
4  4   Yes   Yes  Yes     Yes

补充说明

unite函数更适合合并文本列,对于这类需要去重、处理NA的格式转换场景,转长格式处理再转回宽格式的流程更直接:既能高效过滤无效的NA记录,又能确保每个ID的树种标记唯一,避免重复计数或错误标记。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:40:27