首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分组,然后过滤数据

分组,然后过滤数据
EN

Stack Overflow用户
提问于 2014-08-29 14:07:51
回答 3查看 69关注 0票数 0

我有以下df:

代码语言:javascript
复制
  A B C D E F
1 8 0 0 0 0 0
2 2 1 5 7 1 2
3 1 0 0 2 1 0
4 6 0 0 0 0 2

我想首先将数据分成两组,每组有3个重复,例如A:C是一组,D:F是第二组。

然后,我希望排除任意组中至少2个复制/列中的值=0的任何行。因此,我应该得到以下df:

代码语言:javascript
复制
  A B C D E F
1 2 1 5 7 1 2
2 1 0 0 2 1 0

任何帮助都将不胜感激!

EN

回答 3

Stack Overflow用户

发布于 2014-08-29 14:24:05

我的解释是:

代码语言:javascript
复制
> dat[ rowSums(dat[1:3]==0)<2 | rowSums(dat[4:6]==0)<2 , ]
  A B C D E F
2 2 1 5 7 1 2
3 1 0 0 2 1 0

这是字面音译(在逻辑上应该是相同的):

代码语言:javascript
复制
> dat[ !( rowSums(dat[1:3]==0)>=2 & rowSums(dat[4:6]==0)>=2) , ]
  A B C D E F
2 2 1 5 7 1 2
3 1 0 0 2 1 0
票数 1
EN

Stack Overflow用户

发布于 2014-08-29 14:24:57

尝试:

代码语言:javascript
复制
ddf = structure(list(A = c(8L, 2L, 1L, 6L), B = c(0L, 1L, 0L, 0L), 
    C = c(0L, 5L, 0L, 0L), D = c(0L, 7L, 2L, 0L), E = c(0L, 1L, 
    1L, 0L), F = c(0L, 2L, 0L, 2L)), .Names = c("A", "B", "C", 
"D", "E", "F"), class = "data.frame", row.names = c(NA, -4L))

df1 = ddf[,1:3]
df2 = ddf[,4:6]

ddf[which(rowSums(df2==0)<2 & rowSums(df1==0)<2),]
  A B C D E F
2 2 1 5 7 1 2

您的条件是:“然后,我希望排除任意组中至少2个复制/列中的任何值为0的行。”因此,只有一行满足此条件。您自己的答案中的第二行(1 0 0 2 1 0)不满足此条件,因为这里的第一组有2个零(1 0 0)。

票数 0
EN

Stack Overflow用户

发布于 2014-08-29 16:57:01

如果您有两个以上的组,您可以执行以下操作:

代码语言:javascript
复制
 N <- ncol(dat)
 indx <- Reduce(`|`,
          lapply(seq(1,N, by=3), function(i) rowSums(!dat[i:(i+2)])<2) )
 dat[indx,]
 #  A B C D E F
 #2 2 1 5 7 1 2
 #3 1 0 0 2 1 0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25562547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档