R:如果行包含某个值(对于许多列),如何从数据框中删除行

约翰·亚伯拉罕

我有一个包含许多变量(列)和行(观察值)的数据框。我想删除包含1来自数据框值的行

我知道我可以

      X Y
    1 1 1
    2 2 1
    3 3 1
    4 4 4
    5 5 5

做这个:

    test <- data.frame("X"=1:5, "Y"=c(1,1,1,4,5))

    test[test$X>1 & test$Y>1, ]

并获得:

      X Y
    4 4 4
    5 5 5

但是我不想写data$var1 > 1 & data$var2 > 1 ...20或50个变量来做这么简单的事情。

我无需进行大量写作就可以得到相同的结果?


编辑:大oof:这里建议的三种方法都不会产生相同数量的观察结果。这是一个错误吗?可能是与NA相互作用的某种影响?

方法1)

df[!apply(df[, myCols], 1, function(x) any(x == 1)),]

> any(df == 1)
[1] TRUE

方法2)

removeRowsWithOnes <- function(df) {
  rowsToRemoveIndices <- rowSums(df == 1) > 0
  return(df[!rowsToRemoveIndices,])
}

> any(df == 1)
[1] NA

方法3)(与方法2删除的行数不同))

require(tidyverse)

df %>% 
    filter(
        across(everything(), ~ . != 1)
    )

> any(df == 1)
[1] NA

编辑2:将NA添加到df后:

df <- data.frame("x"=c(1,NA,2,2,3,NA), "y"=c(NA,1,1,4,NA,NA))

   x  y
1  1 NA
2 NA  1
3  2  1
4  2  4
5  3 NA
6 NA NA

仅方法3)产生预期的结果:

   x  y
1  2  4
2  3 NA
3 NA NA

编辑2:

请参阅@Jonas的评论:

为了使这两种方法都能工作,您可以将na.rm = TRUE添加到rowSums和任何调用中。默认情况下,此选项设置为na.rm = FALSE(请参阅文档)

塞尔坎

另一个可能的答案是使用 tidyverse

require(tidyverse)

df %>% 
    filter(
        across(everything(), ~ . != 1)
    )

它将保留数据框中所有变量中不同于1的行

注意:如果您有NA数据,此方法也将删除这些索引。因此,我建议以下扩展;

df %>% 
    filter(
        across(everything(), ~ . != 1 | is.na(.))
    )

然后,它将保留所有不同于1的值,而不会删除NA行。否则,您可能会删除本应保留的行(取决于您所做的一切)。

比较运行时间

以乔纳斯(Jonas)为例,我尝试对所有解决方案进行基准测试。

# Using rowSums
removeRowsWithOnes <- function(df) {
    rowsToRemoveIndices <- rowSums(df == 1) > 0
    return(df[!rowsToRemoveIndices,])
}

# Using apply
removeRowsWithOnes2 <- function(df) {
    df[!apply(df, 1, function(x) any(x == 1)),]
}

# Using tidyversr
removeRowsWithOnes3 <- function(df) {df %>% 
    filter(
        across(everything(), ~ . != 1 | is.na(.))
    )}

基准测试

n <- 1e5
set.seed(5555)
bigSampleData <- do.call("cbind",lapply(LETTERS, function(nam) setNames(data.frame(sample(1:1000,n,replace = TRUE)),nam)))
microbenchmark::microbenchmark(removeRowsWithOnes(bigSampleData),removeRowsWithOnes2(bigSampleData),removeRowsWithOnes3(bigSampleData),times=10)

结果

Unit: milliseconds
                               expr       min        lq      mean    median        uq      max neval cld
  removeRowsWithOnes(bigSampleData)  35.57471  40.54827  77.64570  41.06107  60.34422 217.3363    10  b 
 removeRowsWithOnes2(bigSampleData) 217.34171 222.35136 227.90565 227.05570 229.02625 240.9274    10   c
 removeRowsWithOnes3(bigSampleData)  17.42338  22.24363  23.34607  22.88563  23.72934  32.0293    10 a 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如果它们包含某个值(R,dplyr),则从数据框中删除行

来自分类Dev

如果任何行包含特定字符串,请从数据框中删除列

来自分类Dev

如果行包含R中相同变量的两个值,则转置数据框

来自分类Dev

如果给定列中的值未包含在列表中,则删除熊猫数据框行

来自分类Dev

R:如果前一行包含某个值,则更新行

来自分类Dev

如果匹配的字符串超过某个值,则从 Pandas 数据框中删除行

来自分类Dev

R:删除数据框中重复的行,该数据框中的第二列包含一个值

来自分类Dev

在 R 数据框中,对于给定的行,如何找到 A 列中的值与 B 列中的值的百分比?

来自分类Dev

如果列中的某行匹配某个值,如何返回数据框

来自分类Dev

如果列值(字符串)包含python集合中的任何值,如何过滤数据框行?

来自分类Dev

如果列值(字符串)包含python集合中的任何值,如何过滤数据框行?

来自分类Dev

如何根据行值的指定顺序从R中的数据框中删除列

来自分类Dev

如果数组中的一行包含给定值R,则返回完整数组

来自分类Dev

根据许多列和值从数据框中获取行

来自分类Dev

如果包含任何字母表(非数字),如何从熊猫数据框中删除多列?

来自分类Dev

从熊猫数据框中删除许多列

来自分类Dev

如果特定列中的值不是pandas数据框中的整数,则删除行

来自分类Dev

如果其中一行包含特定值,则返回列中具有重复值的行

来自分类Dev

如何使用R中许多列的条件从数据框中选择行

来自分类Dev

如果一列中的值超过某个值,则删除 2 列中的所有行

来自分类Dev

如果某一列与值匹配,则从数据框中删除行-Python 3.6

来自分类Dev

删除一行,如果它包含熊猫中的某个值

来自分类Dev

R-如果一个值= x,则删除“成对”数据框中的两行

来自分类Dev

如果R中的数据框中的值和ID重复,则如何删除整行

来自分类Dev

python数据框:删除所有列的值都是某个值的行

来自分类常见问题

如何从熊猫数据框中删除包含特定列中特定字符串的行?

来自分类Dev

如何从R中仅包含少量单词的数据框中删除行?

来自分类Dev

如果列行中的值为零,则删除pandas数据框中所有列中的所有行

来自分类Dev

如何删除熊猫数据框列中包含连字符的行?

Related 相关文章

  1. 1

    如果它们包含某个值(R,dplyr),则从数据框中删除行

  2. 2

    如果任何行包含特定字符串,请从数据框中删除列

  3. 3

    如果行包含R中相同变量的两个值,则转置数据框

  4. 4

    如果给定列中的值未包含在列表中,则删除熊猫数据框行

  5. 5

    R:如果前一行包含某个值,则更新行

  6. 6

    如果匹配的字符串超过某个值,则从 Pandas 数据框中删除行

  7. 7

    R:删除数据框中重复的行,该数据框中的第二列包含一个值

  8. 8

    在 R 数据框中,对于给定的行,如何找到 A 列中的值与 B 列中的值的百分比?

  9. 9

    如果列中的某行匹配某个值,如何返回数据框

  10. 10

    如果列值(字符串)包含python集合中的任何值,如何过滤数据框行?

  11. 11

    如果列值(字符串)包含python集合中的任何值,如何过滤数据框行?

  12. 12

    如何根据行值的指定顺序从R中的数据框中删除列

  13. 13

    如果数组中的一行包含给定值R,则返回完整数组

  14. 14

    根据许多列和值从数据框中获取行

  15. 15

    如果包含任何字母表(非数字),如何从熊猫数据框中删除多列?

  16. 16

    从熊猫数据框中删除许多列

  17. 17

    如果特定列中的值不是pandas数据框中的整数,则删除行

  18. 18

    如果其中一行包含特定值,则返回列中具有重复值的行

  19. 19

    如何使用R中许多列的条件从数据框中选择行

  20. 20

    如果一列中的值超过某个值,则删除 2 列中的所有行

  21. 21

    如果某一列与值匹配,则从数据框中删除行-Python 3.6

  22. 22

    删除一行,如果它包含熊猫中的某个值

  23. 23

    R-如果一个值= x,则删除“成对”数据框中的两行

  24. 24

    如果R中的数据框中的值和ID重复,则如何删除整行

  25. 25

    python数据框:删除所有列的值都是某个值的行

  26. 26

    如何从熊猫数据框中删除包含特定列中特定字符串的行?

  27. 27

    如何从R中仅包含少量单词的数据框中删除行?

  28. 28

    如果列行中的值为零,则删除pandas数据框中所有列中的所有行

  29. 29

    如何删除熊猫数据框列中包含连字符的行?

热门标签

归档