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

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

这可能很简单,但我在这个网站上看了很多答案都没有找到解决方案。我有一个数据框,我想删除所有等于1的观测值。在我的原始数据框中,有超过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),]

我的预期输出是

 x2 x3
0   0       
r dataframe conditional-statements filtering subset
1个回答
4
投票

如果你使用 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))

1
投票

你可以保留这些行 variance不是零。当我们使用 %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

输出:数据:我在第3行添加了一个缺失的记录,这是否回答了你的问题?

 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.