4

在我的数据框中,第一列是一个因子,我想删除具有特定因子名称值的(当该值存在时)。我试过:

df <- df[-grep("factorname",df$parameters),]

当存在目标因子名称时,效果很好。但是,如果factorname不存在,则此命令会破坏数据框,将其保留为 0 行。所以我尝试了:

df <- df[!apply(df, 1, function(x) {df$parameters == "factorname"}),]

这不会删除有问题的行。如果factorname存在,我如何测试是否存在factorname并删除该行?

4

2 回答 2

7

你可以使用:

df[ which( ! df$parameter %in% "factorname") , ]

(使用%in%它是因为它可以更好地推广到多个排除标准。)也可能:

df[ !grepl("factorname", df$parameter) , ]
于 2013-08-12T02:46:43.667 回答
2
l<-sapply(iris,function(x)is.factor(x)) # test for the factor variables
>l
Sepal.Length  Sepal.Width Petal.Length  Petal.Width      Species 
       FALSE        FALSE        FALSE        FALSE         TRUE 

m<-iris[,names(which(l=="TRUE"))]) #gives the data frame of factor variables only
iris[iris$Species !="setosa",] #generates the data with Species other than setosa 



   > head(iris[iris$Species!="setosa",])
   Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
51          7.0         3.2          4.7         1.4 versicolor
52          6.4         3.2          4.5         1.5 versicolor
53          6.9         3.1          4.9         1.5 versicolor
54          5.5         2.3          4.0         1.3 versicolor
55          6.5         2.8          4.6         1.5 versicolor
56          5.7         2.8          4.5         1.3 versicolor
于 2013-08-12T03:15:18.827 回答