繁体   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