【问题标题】:Getting subset of of data based on multiple column values基于多列值获取数据子集
【发布时间】:2015-09-29 18:48:30
【问题描述】:

我试图除去基于是否列2和3包含0的行。我不断收到非常奇怪的结果。我试图把它写不subset最初是因为我读的地方,subset应只用于少量因为内存成本的数据。无论是尝试为我工作。然而。有人可以解释我做错了什么? P>

df <- data.frame(val1=c(1,2,3), val2=c(4,0,5), val3=c(3,0,6))
subset(df,df>0,c(2,3))
data.frame(df[df[,c(2,3)]!=0])

开始数据帧:

   val1   val2   val3
1  1       4       3
1  2       0       0
3  3       5       6

端的目标:

   val1   val2   val3
1  1       4       3
3  3       5       6

【问题讨论】:

    标签: r subset


    【解决方案1】:

    使用subset,我们根据第二列和第三列创建逻辑索引。

    subset(df, subset=!(val2==0|val3==0))
    

    subset 参数适用于列而不适用于矩阵。 我们也可以用[代替subset

    df[!(df[,2]==0|df[,3]==0),]
    

    关于 OP 帖子中的第二个答案

    df[,c(2,3)]!=0 #returns a matrix
    #      val2  val3
    #[1,]  TRUE  TRUE
    #[2,] FALSE FALSE
    #[3,]  TRUE  TRUE
    

    对于子集行,我们每行只需要一个逻辑索引。


    另一个选项是rowSums(如果要删除第 2 列和第 3 列均为 0 的行)

     df[rowSums(df[2:3])!=0,]
    

    df$val3[2] <- 2
    

    将返回所有带有rowSums 的行,而其他方法返回第 1 行和第 3 行。

    subset 的等效选项是 &amp;

    subset(df, !(val2==0 & val3==0))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-20
      • 2020-10-23
      • 1970-01-01
      • 2019-01-25
      • 2020-09-29
      • 1970-01-01
      • 2021-09-23
      相关资源
      最近更新 更多