我有一个拥有250万行的数据帧(df)。示例数据帧如下所示:如何在R中抽取某些行而无需一次又一次地运行整个数据
PERMNO <- c(10000,10000,10001,10001,10001,10001, 10002,10002,10002)
TICKER <- c('OMFGA','OMFGA', 'GFGC', 'GFGC', 'GFGC', 'GFGC', 'MBNC', 'MBNC', 'MBNC')
date <- as.Date(c('1986-03-31','1986-04-30','1986-01-31', '1986-01-31', '1986-03-31', '1986-04-30', '1986-04-30','1986-05-30', '1986-05-30'))
df = data.frame(PERMNO, date, TICKER)
在此示例中,有3个独特的PERMNO。现在我需要提取给定的PERMNO的所有数据,并检查是否有重复的日期。我的目的是为特定的PERMNO删除重复日期的行。这个操作我为所有独特的PERMNO做的
我的方法:我使用子集函数来提取特定PERMNO的数据,然后检查日期中的重复项。但是使用这种方法,我的代码每次都会运行整个数据(原始数据集中有250万行),以便为特定的PERMNO提取数据。有没有更简单的方法来做到这一点?由于我拥有22000个独特的PERMNO,代码将永久运行在For循环中。
这里是我使用的代码:
uniqueperm = unique(df$PERMNO)
lenperm = length(uniqueperm)
data_final = df[FALSE,]
for(i in 1:lenperm){
perm = uniqueperm[i]
df1 = filter(df, PERMNO == perm)
df1 = subset(df1,!duplicated(df1$date))
data_final = rbind(data_final,df1)
df1 = df1[FALSE,]
}
data_final
这不就是'PERMNO'和'date'上的重复,那么如果你想在每个'PERMNO'子集内的'date'上寻找重复的东西?即'重复(df [c(“PERMNO”,“date”)])'或者我错过了一些微妙的东西? – thelatemail
你可以添加你的代码(For循环),所以我们有一些参考? –
如果您发布了您正在运行的代码,我会得到您所描述的内容,但它会更容易准确地看到它。 – jamzsabb