在 lApply 函数中指示数据框中的行

  • 本文关键字:数据 指示 lApply 函数 r
  • 更新时间 :
  • 英文 :


我有一个纵向数据帧:

 id= rep(1:3,each= 3)
 a_yr = rep(1994:1996,3)
 b_yr = c(1994,1995,1997,1994,1998,2001,1994,1997, 1998)
 x= 1:9
 df= data.frame(id,a_yr,b_yr,x)
  ids a_yr b_yr x
1   1 1994 1994 1
2   1 1995 1995 2
3   1 1996 1997 3
4   2 1994 1994 4
5   2 1995 1998 5
6   2 1996 2001 6
7   3 1994 1994 7
8   3 1995 1997 8
9   3 1996 1998 9

我想创建一个子集,其中包含第一个a_yr匹配的行b_yr每个 id:

   ids a_yr b_yr x
2   1 1994 1994 1
4   2 1994 1994 4
7   3 1994 1994 7

我尝试使用lapply函数:

lapply(unique(df$id), function(i){
  data= df[which(df$id==i),]
  rownames(data)<- data$a_yr
  ind = data[1,"b_yr"]
  dat= data[ind,]
})

但它返回了一堆NA

[[1]]
   id a_yr b_yr  x
NA NA   NA   NA NA
[[2]]
   id a_yr b_yr  x
NA NA   NA   NA NA
[[3]]
   id a_yr b_yr  x
NA NA   NA   NA NA

我想知道如何在函数中索引行lapply或任何其他解决此问题的更好方法。谢谢!

在基本 R 中:

df[df$a_yr==df$b_yr,]
  id a_yr b_yr x
2  1 1995 1995 2
4  2 1994 1994 4
7  3 1994 1994 7
有很多

方法,这里有一个:

library(dplyr)
df %>% group_by(id) %>% filter(a_yr==b_yr)


   #     id  a_yr  b_yr     x
   #   (int) (int) (dbl) (int)
   #1     1  1995  1995     2
   #2     2  1994  1994     4
   #3     3  1994  1994     7

data.table

library(data.table)
setDT(df)[a_yr==b_yr]

最新更新