[英]R // count rows and sum col value if multiple conditions in other columns of a data.table are met // efficient & fast data.table solution
[英]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.