簡體   English   中英

在 R data.table 中,根據具有多個條件的其他列中的元素有條件地刪除行

[英]In R data.table conditionally remove rows based on elements in other columns with multiple conditions

如何根據 data.table 中的行刪除 data.table 中的行? 可重現的例子:

library(data.table)
DT = data.table(
  Subject = rep(c("A", "B"), 4:3),
  Test = rep(c("TEST_A","TEST_B"), 4:3),
  Folder = rep(c("D1", "Screen"), 4:3),
  Date = as.Date(
    sprintf("10-%02d-%02d", c(22:25, 25:27), rep(1:2, 4:3)),
    '%m-%d-%y'
  )
)

DT[Test == "TEST_A", Date := "na"]

這是我的邏輯:對於每個 SUBJECT 刪除 TEST_A 和文件夾“D1”沒有日期但 TEST_B 和文件夾“屏幕”有日期的所有行。 我知道我可以只寫一個 if 語句,但我試圖只使用 data.table 來保持它的可讀性。

如果我正確理解您的問題,您想刪除日期值為NA的行。 如果是這種情況,那么下面的答案應該有效。

請注意,我對data.table不太熟悉,所以我必須先將DT轉換為dataframe

library(dplyr)

# Convert to a dataframe 
DT_df = as.data.frame(DT)

# Drop rows with NAs
DT_df = DT_df %>%  drop_na()

# Convert back to a data.table
DT_New = as.data.table(DT_df, TRUE)

Output:

dput(DT_df)

structure(list(Subject = c("B", "B", "B"), Test = c("TEST_B", 
"TEST_B", "TEST_B"), Folder = c("Screen", "Screen", "Screen"), 
    Date = structure(c(11985, 11986, 11987), class = "Date")), index = structure(integer(0), "`__Test`" = integer(0)), class = "data.frame", row.names = c(NA, 
-3L))

暫無
暫無

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

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