R过滤数据帧

时间:2018-03-19 21:59:32

标签: r dataframe

我有一个数据集,其中包含多个日期的多个股票的价格(类似于下面的一个)。我试图提取个别股票没有交易的所有日期(即NA而不是数值),因此结果将匹配格式" stock | date"。我不知道如何处理这个问题,因为我在第一行中有一个标题(日期)和实际记录(股票代码)的混合,而我在R中所做的唯一过滤就是使用&# 39;子集'具有适当列名的数据集上的函数。我的真实数据集将有大约2000列和30行。有人能建议一种有效的方法来提取NA吗?

数据:

date    Stock1  Stock2  Stock3  Stock4  Stock5
01-Jan  10  20  30  40  NA
02-Jan  10  NA  30  40  NA
03-Jan  10  20  30  40  NA
04-Jan  10  20  NA  40  NA
05-Jan  10  20  30  40  50
06-Jan  10  20  30  NA  50
07-Jan  NA  20  30  NA  50

结果:

stock1  07-Jan              
Stock2  02-Jan              
Stock3  04-Jan              
Stock4  06-Jan              
Stock4  07-Jan              
Stock5  01-Jan              
Stock5  02-Jan              
Stock5  03-Jan              
Stock5  04-Jan              

1 个答案:

答案 0 :(得分:1)

一个解决方案可以使用tidyr::gather,然后过滤是NA的值。

  # Sample data 
  df <- read.table(text = "date    Stock1  Stock2  Stock3  Stock4  Stock5
  01-Jan  10  20  30  40  NA
  02-Jan  10  NA  30  40  NA
  03-Jan  10  20  30  40  NA
  04-Jan  10  20  NA  40  NA
  05-Jan  10  20  30  40  50
  06-Jan  10  20  30  NA  50
  07-Jan  NA  20  30  NA  50", header = T)

  library(tidyverse)
  gather(df, key, value, -date) %>% 
    filter(is.na(value)) %>%
    select(key, date)

  # key   date
  # 1 Stock1 07-Jan
  # 2 Stock2 02-Jan
  # 3 Stock3 04-Jan
  # 4 Stock4 06-Jan
  # 5 Stock4 07-Jan
  # 6 Stock5 01-Jan
  # 7 Stock5 02-Jan
  # 8 Stock5 03-Jan
  # 9 Stock5 04-Jan
相关问题