根据 is.na 条件删除 R 中的多行

Deleting multiple rows in R based on a is.na condition

我对 R 并不完全陌生,但我可以在这方面派上用场:)

所以,我有一个关于过去 20 年大约 14,000 只不同股票的数据集。现在,很明显,其中一些股票在整个时间段内都没有交易。我正在尝试清理我的数据,以便对于任何股票,如果在特定月份至少一天没有交易,则该(唯一)股票的整个月数据将被删除。也就是说,我只想保留特定月份每天交易的每只股票的数据。我希望这是清楚的!

如果你至少能指导我使用 packages/functions 来完美地进行过滤,那就太好了。

谢谢!

示例:

mydata <- structure(list(permno = c(10001L, 10001L, 10001L, 10001L, 10001L, 
10001L, 10001L, 10001L, 10001L, 10001L), date = structure(c(7306, 
7307, 7308, 7309, 7312, 7313, 7314, 7315, 7316, 7319), class = "Date"), 
    sic = c(4920, 4920, 4920, 4920, 4920, 4920, 4920, 4920, 4920, 
    4920), price = c(3.375, 3.33333333333, NA, 3.35416666667, 
    3.375, 3.375, 3.375, 3.375, 3.375, NA), cap = c(10347750, 
    10220000, 10220000, 10283875, 10347750, 10347750, 10347750, 
    10347750, 10347750, 10092250)), row.names = c(NA, 10L), class = "data.frame")

mydata

permno 指的是特定股票,对于每只股票,我只想保留没有 n/a.

的月份的数据

date分开年月日。对于每个月的每只股票,仅保留当月每天都有交易的股票的数据。

library(dplyr)
library(lubridate)

result <- mydata %>%
            mutate(year = year(date), 
                   month = month(date), 
                   day = day(date)) %>%
            group_by(permno, year, month) %>%
            filter(all(!is.na(price)))