【问题标题】:Subsetting a dataframe with the "and" condition (R)使用“and”条件 (R) 对数据框进行子集化
【发布时间】:2016-04-15 14:51:25
【问题描述】:

我将数据框定义为:

df <- data.frame(c(1,0,4,0,4),c(3,2,0,0,2))
names(df) <- c("A","B")

地点:

> df
  A B
1 1 3
2 0 2
3 4 0
4 0 0
5 4 2

现在我只想获取“不完全为空”的行。我是这样做的:

df_notNull <- subset(df,df$A!=0 & df$B!=0)
> df_notNull
      A B
    1 1 3
    5 4 2

显然我没有得到我想要的。问题不在于“and”条件,因为我只想在有两个零时才忽略行(所以是“and”)。我必须写不同的吗?

【问题讨论】:

    标签: r subset


    【解决方案1】:
    df[rowSums(df) != 0,]
    #  A B
    #1 1 3
    #2 0 2
    #3 4 0
    #5 4 2
    

    【讨论】:

      【解决方案2】:

      当两者都不为 0 时,您的代码是 slecet。因此,请使用 | (OR) 而不是 &amp; 或以不同的方式使用 !

      df_notNull <- subset(df,df$A!=0 | df$B!=0)
      

      df_notNull <- subset(df,!(df$A==0 & df$B==0))
      

      正如@Frank 所建议的,您不需要df$

      df_notNull <- subset(df,A!=0 | B!=0)
      df_notNull <- subset(df,!(A==0 & B==0))
      

      【讨论】:

      • 我猜在subset(df, ...)里面你不需要df$
      【解决方案3】:

      我们可以使用Reduce+

      df[!!Reduce(`+`, df),]
      #  A B
      #1 1 3
      #2 0 2
      #3 4 0
      #5 4 2
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-20
        • 2022-01-23
        • 2021-12-04
        • 2022-06-18
        • 1970-01-01
        • 1970-01-01
        • 2021-06-05
        相关资源
        最近更新 更多