我有一个数据集,其中包含多个日期的多个股票的价格(类似于下面的一个)。我试图提取个别股票没有交易的所有日期(即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
答案 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