簡體   English   中英

根據數字列名稱過濾非 NA

[英]Filter non-NAs on numeric column name

我正在嘗試使用as.Date變量過濾包含數字/日期名稱的as.Date

例如,考慮這個小型數據庫:

dt <- data.table(
names = c("A", "B", "C"),
`2020-01-01` = c(1, NA, 2),
`2020-01-02` = c(3, 4, 5),
`2020-01-03` = c(6, 7, 8)
)

我目前正在過濾所需的日期列,如下所示:

dt1 <- dt %>% filter(!is.na(`2020-01-01`)) %>% select(names)

我的想法是創建一個meeting_date變量,這個變量應該用作我所有 R 代碼的日期參考。

meeting_date <- as.Date("2020-01-01")

但當然代碼:

dt1 <- dt %>% filter(!is.na(meeting_date)) %>% select(names)

不起作用。 原因是缺少反引號,所以沒有成功我嘗試了以下代碼:

dt1 <- dt %>% filter(!is.na(paste("`", meeting_date, "`", sep=""))) %>% select(names)
dt1 <- dt %>% filter(!is.na(noquote(paste("`", meeting_date, "`", sep="")))) %>% select(names)

有誰知道如何進行? 謝謝!

你可以做:

meeting_date <- as.Date("2020-01-01")

dt %>%
 filter_at(vars(one_of(as.character(meeting_date))), ~ !is.na(.))

  names 2020-01-01 2020-01-02 2020-01-03
1     A          1          3          6
2     C          2          5          8

您可以使用subset + is.na如下

meeting_date <- "2020-01-01"
dtout <- subset(dt,as.vector(!is.na(dt[, ..meeting_date])))

以至於

> dtout
   names 2020-01-01 2020-01-02 2020-01-03
1:     A          1          3          6
2:     C          2          5          8

長數據應該更容易處理:

library(data.table)
dt <- data.table(
  names = c("A", "B", "C"),
  `2020-01-01` = c(1, NA, 2),
  `2020-01-02` = c(3, 4, 5),
  `2020-01-03` = c(6, 7, 8)
)

#Make data 'long' & change the new 'name' column to dates
# change confusing column 'name' to date while we're at it.
dt_long <- dt %>% pivot_longer(-names) %>% 
  mutate(date = lubridate::ymd(name)) %>%
  select(-name)

meeting_date <- as.Date("2020-01-01")

dt_long %>% filter(date == meeting_date & (!is.na(value)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM