如何删除具有特定值的所有行

问题描述 投票:0回答:4

这可能非常简单,但是我没有找到解决方案,而是在整个站点上查看了答案。我有一个数据框,我想删除所有等于1的观察值。在我的原始df中,有90多个列。

我尝试使用lapply函数并通过过滤,但是我无法使其工作:

df <- data.frame(x1 = c('0','1', '0', '1', '1'),
                 x2 = c('1','0', '1', '1', '0'),
                 x3 = c('1','0', '1', '1', '1'))

df[] <- lapply(df, function(x) subset(df, x==0 ))
df<- as.data.frame(lapply(df, function(x) subset(df, x==0 )))
df[] <- lapply(df, function(x) df[!(df$x ==1),])

library(dplyr)
df %>% filter(!all(df == 1))
df<-df[!(df ==1),]
r dataframe conditional-statements filtering subset
4个回答
2
投票

或使用data.table

DT<-as.data.table(df)
ans<-DT[,lapply(.SD, function(x){subset(x,x!="1")})]
ans


1
投票

您可以使用rowSums选择存在单个值而不是1的行。

df[rowSums(df != 1, na.rm = TRUE) > 0, ]
#Another way
#df[rowSums(df == 1, na.rm = TRUE) != ncol(df), ]

#  x1 x2 x3
#1  0  1  1
#2  1  0  0
#3  0  1  1
#4  1  0  1

或使用dplyr

library(dplyr)
df %>% filter_all(any_vars(. != 1))

0
投票

您可以保留var iance不为零的行。当我们使用%in%时,将保留缺少值的行。

df
#     x1 x2 x3
# 1    0  1  1
# 2    1  0  0
# 3 <NA>  1  1
# 4    1  1  1
# 5    1  0  1

df[!apply(df, 1, var) %in% 0, ]
#     x1 x2 x3
# 1    0  1  1
# 2    1  0  0
# 3 <NA>  1  1
# 5    1  0  1

数据:

我在第3行中添加了一个缺失项。

df <- structure(list(x1 = c("0", "1", NA, "1", "1"), x2 = c("1", "0", 
"1", "1", "0"), x3 = c("1", "0", "1", "1", "1")), class = "data.frame", row.names = c(NA, 
-5L))

0
投票

这是否回答了您的问题?

df[df == 1] <- 0

输出:

 x1    x2     x3
 50    0      0     
 0     50     50        
 10    0      0     
 0     0      NA        
 0     100    0

数据:

df <- data.frame('x1' = c('50','1', '10', '1', '1'), "x2" = 
c('1','50', '1', '1', '100'), "x3" = c('1','50', '1', NA, '1'))
© www.soinside.com 2019 - 2024. All rights reserved.