R:基于一列的两个条件的子集数据帧

马卡

我有一个包含位置(loc的数据框,其中每个位置都有两个区域(type)和每个区域中的干扰区域(area)。从我的数据框中,我想保留两个区域都发生干扰的位置。

我以为我可以通过按两个条件设置数据子集来简单地做到这一点,但是使用AND条件(&)

subset(dd, (dd$type == "npr" & dd$area > 0 ) & (dd$type == "buff" & dd$area > 0 ) ) 

给我空输出

[1] loc  type area
<0 rows> (or 0-length row.names)

并使用“ OR”条件(|)

subset(dd, (dd$type == "npr" & dd$area > 0 ) | (dd$type == "buff" & dd$area > 0 ) ) 

不是我想要的

  loc type area
1   a  npr   10
2   a buff   20
4   b buff   10
5   c  npr    5
7   d  npr    5
8   d buff    5

在两种区域类型中,如何正确子集扰动区域> 0的位置?


我的虚拟数据:

loc<-c("a", "a", "b", "b", "c", "c", "d", "d")
type= rep(c("npr", "buff"), 4)
area = c(10,20,0,10,5,0,5,5)


dd<-data.frame(loc, type, area)

所需的输出:

loc type area
1   a  npr   10
2   a buff   20
3   d  npr    5
4   d buff    5
米科·马蒂拉

您需要计算分组摘要以实现此目的。也就是说,你要找出每个loc如果所有的的area在该位置s为> 0。我一直觉得基础R有点尴尬的分组统计数据,但在这里是实现的一个方法。

首先,使用tapply()来确定loc是否应将其包括在内:

(include <- tapply(dd$area, dd$loc, function(x) all(x > 0)))
#>     a     b     c     d 
#>  TRUE FALSE FALSE  TRUE

然后,我们可以使用loc值对结果进行索引,以获得适合于以下子集的向量dd

include[dd$loc]
#>     a     a     b     b     c     c     d     d 
#>  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE

dd[include[dd$loc], ]
#>   loc type area
#> 1   a  npr   10
#> 2   a buff   20
#> 7   d  npr    5
#> 8   d buff    5

我们还可以将这些步骤放到subset()调用中,以避免创建额外的变量:

subset(dd, tapply(area, loc, function(x) all(x > 0))[loc])
#>   loc type area
#> 1   a  npr   10
#> 2   a buff   20
#> 7   d  npr    5
#> 8   d buff    5

或者,您可以使用dplyr

library(dplyr)

dd %>% 
  group_by(loc) %>% 
  filter(all(area > 0))
#> # A tibble: 4 x 3
#> # Groups:   loc [2]
#>   loc   type   area
#>   <fct> <fct> <dbl>
#> 1 a     npr      10
#> 2 a     buff     20
#> 3 d     npr       5
#> 4 d     buff      5

reprex软件包(v0.2.0.9000)创建于2018-07-25

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

基于两个不同列中的两个条件的子集数据帧R

r 中一次基于两个不同条件的子集数据

如何从R中的两个不同数据帧中添加两列,其中一列只是另一列的唯一值的子集

基于条件熊猫的子集数据帧

在一列中基于两个值对数据框进行子集

子集数据帧中的一列,将子集保留为数据帧

R中的条件子集数据帧

R根据来自两个数据帧的另一列的条件乘以数据帧的列

基于r中条件的子集数据

基于 R 中条件的子集数据

基于两个条件循环遍历数据帧的子集

从两个 Pandas 数据帧向数据帧添加一列,目前使用两个带条件的循环:有没有更快的方法?

问题基于两个单独的数据帧中的值子集列

基于多个相似条件的子集数据帧

通过基于两列随机选择值来子集数据帧

基于数据帧R的子集的一列中“分类值”的百分比

Python2.7:基于groupby第一行中的条件的子集数据帧

熊猫基于一个表中的一列合并两个数据帧,该数据框位于另一表中的两列之间

比较两个数据帧中的两列以及另一列的条件

基于每列中的观察数的子集数据帧

如何基于两个条件对数据进行子集

R 子集数据帧遵循基于日期的规则

如何基于使用一列的子字符串合并两个数据帧

如何基于一个数据帧中的一列和第二个数据帧中的两列合并两个数据帧

子集数据帧仅包含一个因子的水平,而另一个因子的两个水平均具有值

基于R中列内因子级别的层次偏好的子集数据帧

找到满足这两个条件的子集数?

如何创建包含在数据帧大熊猫基于同一类别列的两个不同的值的操作的另一列?

用另一列r中的两个条件来替换一列