繁体   English   中英

根据条件 R 删除行

[英]Remove rows based on condition R

我有这样的数据

Name  Group  Heath  BP  PM
QW    DE23    20    60  10
We    Fw34    0.5   42  2.5
Sd    Kl78    0.4   0.1 0.5
Op    Ss14    43    45  96

如果该值小于 1.8,我需要删除所有行

我使用了以下命令

 data[colSums(data)>=1.8]
 data[,colSums(data)>=1.8, drop=FALSE]
subset(data, select=colSums(data) >=1.8)

但我得到了这样的错误“colSums(数据)中的错误:'x'必须是数字”

预期输出

Name  Group  Heath  BP  PM
QW    DE23    20    60  10
We    Fw34    0.5   42  2.5
Op    Ss14    43    45  96

您可以使用 select 行,其总和为>=1.8

data[rowSums(data[-1:-2])>=1.8,]
#  Name Group Heath BP   PM
#1   QW  DE23  20.0 60 10.0
#2   We  Fw34   0.5 42  2.5
#4   Op  Ss14  43.0 45 96.0

或行中的任何元素>=1.8

data[rowSums(data[-1:-2]>=1.8)>0,]
#  Name Group Heath BP   PM
#1   QW  DE23  20.0 60 10.0
#2   We  Fw34   0.5 42  2.5
#4   Op  Ss14  43.0 45 96.0

data[-1:-2] select 数字列。

这是一个tidyverse的解决方案:


library(tidyverse)


df <- tibble::tribble(
    ~Name,~Group,~Heath,~BP,~PM,
   "QW",    "DE23",20,60,10,
  "We",    "Fw34",0.5,42,2.5,
  "Sd",    "Kl78",0.4,0.1,0.5,
   "Op",    "Ss14",43,45,96
  )


df %>% 
  filter_if(is.numeric,any_vars(.>=1.8))
#> # A tibble: 3 x 5
#>   Name  Group Heath    BP    PM
#>   <chr> <chr> <dbl> <dbl> <dbl>
#> 1 QW    DE23   20      60  10  
#> 2 We    Fw34    0.5    42   2.5
#> 3 Op    Ss14   43      45  96

代表 package (v0.3.0) 于 2020 年 12 月 7 日创建

最简单的方法是使用 filter() function 从 dplyr package 结合 Z99938282F0416EFE4 自动检测到数字列:

library(dplyr)

df <- data.frame(Name = c("QW", "We", "Sd", "Op"),
                 Group = c("DE23", "Fw34", "Kl78", "Ss14"),
                 Heath = c(20, 0.5, 0.4, 43),
                 BP = c(60, 42, 0.1, 45),
                 PM = c(10, 2.5, 0.5, 96))

df %>% filter(rowSums(select_if(., is.numeric)) >= 1.8)

  Name Group Heath BP   PM
1   QW  DE23  20.0 60 10.0
2   We  Fw34   0.5 42  2.5
3   Op  Ss14  43.0 45 96.0

base R Reduce的选项

df[Reduce(`|`, lapply(df[-(1:2)], `>=`, 1.8)),]
#   Name Group Heath BP   PM
#1   QW  DE23  20.0 60 10.0
#2   We  Fw34   0.5 42  2.5
#4   Op  Ss14  43.0 45 96.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM