R语言使用tidyverse/dplyr生成计数型虚拟变量
R语言tidyverse实现分组计数转宽表方案
直接使用tidyverse生态下的dplyr、tidyr函数即可完成需求,无需额外依赖,核心逻辑分两步:
- 先按
ID和FRUIT两列分组,统计每个ID对应每种水果的出现次数 - 将长格式的计数结果转换为宽表,自动生成对应水果的列,没有出现的水果计数填充为0
完整可运行代码如下:
# 加载tidyverse生态包 library(tidyverse) # 构造示例数据集 df <- tibble( ID = c("001", "002", "001", "002", "003", "001"), FRUIT = c("apple", "grape", "banana", "apple", "apple", "apple") ) # 核心处理逻辑 df %>% count(ID, FRUIT, name = "fruit_count") %>% pivot_wider( names_from = FRUIT, values_from = fruit_count, # 自动给列名加FRUIT_前缀,和示例输出命名保持一致 names_prefix = "FRUIT_", # 对应ID没有出现过的水果,计数填0 values_fill = 0 )
运行后输出结果完全匹配预期结构:
# A tibble: 3 × 4 ID FRUIT_apple FRUIT_banana FRUIT_grape <chr> <int> <int> <int> 1 001 2 1 0 2 002 1 0 1 3 003 1 0 0
如果不需要列名前缀,直接删除names_prefix = "FRUIT_"参数即可,生成的列名会直接使用水果名称。
内容的提问来源于stack exchange,提问作者John Thomas
相关产品推荐
相关产品推荐

