【问题标题】:Deleting multiple rows in R based on a is.na condition根据 is.na 条件删除 R 中的多行
【发布时间】:2021-02-07 09:52:02
【问题描述】:

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

【问题讨论】:

  • 请提供您的数据集示例。
  • @www 请看图片
  • 我没有时间根据您的图像重新创建数据集。请参阅此内容以了解如何制作可重现的示例 (stackoverflow.com/questions/5963269/…)。
  • 对不起,伙计们,我希望这是您要的:)
  • 因此,如果股票在特定日期没有交易,您将price 设为NA

标签: r data-cleaning finance


【解决方案1】:

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)))

【讨论】:

    猜你喜欢
    • 2020-09-02
    • 2020-06-10
    • 2017-09-12
    • 2021-02-24
    • 2021-12-08
    • 2018-10-04
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多