簡體   English   中英

如何刪除 R 中的特定行?

[英]How to remove specific rows in R?

我正在使用的數據集如下:

    C1  C2  C3  R1
R1  NA  NA  NA   5 
R2  NA  NA  0.4  7
R3  0.1     NA   6
R4  NA  NA  NA   2 

從數據框中,我想刪除包含從 C1 到 C3 大於零的數字的行。

最終結果必須是:

    C1  C2  C3  R1
R1  NA  NA  NA   5
R4  NA  NA  NA   2 

我試過:

df<- df %>% filter_at(vars('C1' : 'C2`), all_vars(. > 0))

但我對此有誤。 我該如何解決?

從 Excel 導入: 在此處輸入圖像描述

在 R 中寫道: 在此處輸入圖像描述

您可以在基礎 R 中使用rowSums

cols <- paste0('C', 1:3)  
df[rowSums(df[cols] > 0, na.rm = TRUE) == 0, ]

或使用filter_at

library(dplyr)
df %>% filter_at(vars(C1:C3), all_vars(. <= 0 | is.na(.)))

#   C1 C2 C3 R1
#R1 NA NA NA  5
#R4 NA NA NA  2

並且filter_at已被棄用across因此您可以將其編寫為:

df %>% filter(across(C1:C3, ~. <= 0 | is.na(.)))

數據

df <- structure(list(C1 = c(NA, NA, 0.1, NA), C2 = c(NA, NA, NA, NA
), C3 = c(NA, 0.4, NA, NA), R1 = c(5L, 7L, 6L, 2L)), 
class = "data.frame", row.names = c("R1", "R2", "R3", "R4"))

更手動的方法如下:

df <- as.data.table(df)

if(length(which(df$C1 > 0)) > 0){df <- df[-(which(df$C1 > 0)),]}
if(length(which(df$C2 > 0)) > 0){df <- df[-(which(df$C2 > 0)),]}
if(length(which(df$C3 > 0)) > 0){df <- df[-(which(df$C3 > 0)),]}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM