检查R中数据帧中每行是否包含某些值的最快方法?

时间:2015-10-23 07:56:29

标签: r dataframe isnull

我有一个包含大约300000行和600列的数据帧。我想删除包含刺痛的所有行" NULL"在至少一列中。如果不使用行和列的for循环,我将如何实现它?

在这种情况下,数据表的工作速度是否比普通数据帧快?

2 个答案:

答案 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值的行。