在R语言中为重复ID值创建计数变量membres
问题与解决方案
现有如下R数据集:
structure(list(NUMERO = structure(c(1, 2, 3, 3, 4, 5, 6, 6, 6, 6), format.stata = "%12.0g"), sexe = structure(c(1L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L), levels = c("Dona", "Home"), class = "factor"), edat = c(71, 73, 44, 44, 70, 69, 56, 56, 23, 19)), row.names = c(NA, -10L), class = c("tbl_df", "tbl", "data.frame"))
其中NUMERO为ID变量,需创建新变量membres,将每个NUMERO值的重复次数分配给对应观测(例如NUMERO=6有4条观测,这些观测的membres值均为4)。
方法1:dplyr包实现(tidyverse风格)
通过分组后计算每组行数,是常用的 tidy 处理方式:
library(dplyr) df <- df %>% group_by(NUMERO) %>% mutate(membres = n()) %>% ungroup()
方法2:base R原生实现
无需额外加载包,直接使用ave函数完成:
df$membres <- ave(df$NUMERO, df$NUMERO, FUN = length)
方法3:data.table包实现(大数据高效处理)
如果数据集规模较大,data.table的运算效率更优:
library(data.table) setDT(df)[, membres := .N, by = NUMERO]
内容的提问来源于stack exchange,提问作者Maria
相关产品推荐
相关产品推荐

