我有一个包含大约300000行和600列的数据帧。我想删除包含刺痛的所有行" NULL"在至少一列中。如果不使用行和列的for循环,我将如何实现它?
在这种情况下,数据表的工作速度是否比普通数据帧快?
答案 0 :(得分:1)
我们可以使用rowSums
(应该很快)
df1[!rowSums(df1=='NULL'),]
或另一个选项any
apply
df1[!apply(df1=='NULL', 1, any),]
如果我们需要data.table
解决方案,
setDT(df1)[df1[,!Reduce(`+` , lapply(.SD, `==`, 'NULL'))]]
如果我们使用NULL
read.table / read.csv`(如@Roland所述)将NA
元素作为na.strings='NULL' in the
阅读
setDT(df1)[df1[, !Reduce(`+`,lapply(.SD, is.na))]]
set.seed(24)
df1 <- data.frame(V1= sample(c(LETTERS[1:3],'NULL'), 20, replace=TRUE),
V2= sample(c(LETTERS[1:5], 'NULL'), 20, replace=TRUE),
V3= sample(c(LETTERS[1:8], 'NULL'), 20, replace=TRUE), stringsAsFactors=FALSE)
答案 1 :(得分:0)
如果您使用选项na.strings = c(&#34; NA&#34;,&#34; NULL&#34;)读取数据,则可以使用complete.cases。
df_complete <- df[complete.cases(df),]
仅返回那些不包含任何NA值的行。