如何在R语言中获取数据框列新值首次出现的行号?
获取数据框列中每个新值首次出现的行号
给定如下数据框:
dat <- data.frame(Var1 = c(1,1,1,1,2,2,3,3,3,3,3,3,4,4,4,5,5,5,5))
查看数据:
> dat Var1 1 1 2 1 3 1 4 1 5 2 6 2 7 3 8 3 9 3 10 3 11 3 12 3 13 4 14 4 15 4 16 5 17 5 18 5 19 5
需要获取列Var1中每个新值首次出现的行号,预期结果为:
c(1, 5, 7, 13, 16)
基础R实现方案
方法1:利用duplicated()函数
duplicated()返回逻辑向量标记重复元素,取反后提取对应行号:
which(!duplicated(dat$Var1)) # 输出:[1] 1 5 7 13 16
方法2:结合unique()和match()函数
先获取唯一值,再用match()匹配每个唯一值的首次出现位置:
match(unique(dat$Var1), dat$Var1) # 输出:[1] 1 5 7 13 16
极简包函数方案
dplyr包实现
library(dplyr) dat %>% group_by(Var1) %>% filter(row_number() == 1) %>% pull(row_number()) # 输出:[1] 1 5 7 13 16
data.table包实现
library(data.table) setDT(dat)[, .I[1], by = Var1]$V1 # 输出:[1] 1 5 7 13 16
内容的提问来源于stack exchange,提问作者user24031531
相关产品推荐
相关产品推荐

