首页 > 解决方案 > 根据 is.na 条件删除 R 中的多行

问题描述

我对 R 并不完全陌生,但我可以在这方面有所帮助 :)

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

如果您至少可以指导我使用我可以用来漂亮地进行此过滤的包/功能,那将是非常棒的。

谢谢!

例子:

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 的月份的数据。

标签: rdata-cleaningfinance

解决方案


将年、月、日与 分开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)))

推荐阅读