R 依赖于两列的筛选逻辑
我正在努力编写正确的逻辑,只根据一列中的条件过滤两列。我有多个id,如果一个id出现在2020年,我希望测量id的其他年份的所有数据都会出现 例如,如果一个组包含数字3,我需要该组中的所有值。我们应该得到一个包含所有b和d行的数据帧R 依赖于两列的筛选逻辑,r,dplyr,R,Dplyr,我正在努力编写正确的逻辑,只根据一列中的条件过滤两列。我有多个id,如果一个id出现在2020年,我希望测量id的其他年份的所有数据都会出现 例如,如果一个组包含数字3,我需要该组中的所有值。我们应该得到一个包含所有b和d行的数据帧 df4 <- data.frame(group = c("a", "a", "a", "a", "a", "b", "b"
df4 <- data.frame(group = c("a", "a", "a", "a", "a", "b", "b", "b", "b", "b",
"c", "c", "c", "c", "c", "d", "d", "d", "d", "d"),
pop = c(1, 2, 2, 4, 5, 1, 2, 3, 4, 5, 1, 2, 1, 4, 5, 1, 2, 3, 4, 5),
value = c(1,2,3,2.5,2,2,3,4,3.5,3,3,2,1,2,2.5,0.5,1.5,6,2,1.5))
threes <- df4 %>%
filter(pop == 3 |&ifelse????
你可以做:
df4[df4$group%在%df4$group[df4$pop==3],]
>组流行值
>6b12.0
>7B23.0
>8B34.0
>9 b 4 3.5
>10 b 5 3.0
>16 d 10.5
>17 d 2 1.5
>18 d 36.0
>19 d 4 2.0
>20 d 5 1.5
你可以做:
df4[df4$group%在%df4$group[df4$pop==3],]
>组流行值
>6b12.0
>7B23.0
>8B34.0
>9 b 4 3.5
>10 b 5 3.0
>16 d 10.5
>17 d 2 1.5
>18 d 36.0
>19 d 4 2.0
>20 d 5 1.5
使用dplyr:
df4%>%group_by(group)%>%filter(any(pop==3))
使用dplyr:
df4%>%group_by(group)%>%filter(any(pop==3))
这里的答案比其他答案慢一点,涉及的步骤更多,但对我来说更清楚一点:
df4 %>%
filter(pop == 3) %>%
distinct(group) %>%
pull(group) -> groups
df4 %>%
filter(group %in% groups)
或者,如果要将这两个步骤结合起来:
df4 %>%
filter(group %in% df4 %>%
filter(pop == 3) %>%
distinct(group) %>%
pull(group))
这里的答案比其他答案慢一点,涉及的步骤更多,但对我来说更清楚一点:
df4 %>%
filter(pop == 3) %>%
distinct(group) %>%
pull(group) -> groups
df4 %>%
filter(group %in% groups)
或者,如果要将这两个步骤结合起来:
df4 %>%
filter(group %in% df4 %>%
filter(pop == 3) %>%
distinct(group) %>%
pull(group))
您可以使用dplyr group_by、filter和任何组合函数来实现此目的。对于匹配条件,any将返回TRUE。Group by将对您提到的分组变量的每个子组执行操作。 遵循以下步骤: 首先,通过管道将数据传送到group_by,再传送到group by您的group变量。 然后,如果使用任何函数,任何组pop等于3,则“管道到过滤器”将按过滤。 输出: 三 一个tibble:10x3 分组:分组[2] 组流行值 1b12 2 b 2 3 3B34 4 b 4 3.5 5 b 5 3 6D10.5 7 d 2 1.5 8D36 9 d 4 2 10 d 5 1.5
您可以使用dplyr group_by、filter和任何组合函数来实现此目的。对于匹配条件,any将返回TRUE。Group by将对您提到的分组变量的每个子组执行操作。 遵循以下步骤: 首先,通过管道将数据传送到group_by,再传送到group by您的group变量。 然后,如果使用任何函数,任何组pop等于3,则“管道到过滤器”将按过滤。 输出: 三 一个tibble:10x3 分组:分组[2] 组流行值 1b12 2 b 2 3 3B34 4 b 4 3.5 5 b 5 3 6D10.5 7 d 2 1.5 8D36 9 d 4 2 10 d 5 1.5
一个简单的基本R选项是使用subset+ave 给
group pop value
6 b 1 2.0
7 b 2 3.0
8 b 3 4.0
9 b 4 3.5
10 b 5 3.0
16 d 1 0.5
17 d 2 1.5
18 d 3 6.0
19 d 4 2.0
一个简单的基本R选项是使用subset+ave 给
group pop value
6 b 1 2.0
7 b 2 3.0
8 b 3 4.0
9 b 4 3.5
10 b 5 3.0
16 d 1 0.5
17 d 2 1.5
18 d 3 6.0
19 d 4 2.0
这有什么不同?我并没有注意到其他人在写答案,直到我自己弄明白了这个逻辑。巧合的是,我们的逻辑是一样的。我试图更详细地解释如何使用代码,并测试了我的代码,以确保这与问题中提出的方式工作。这有什么不同?直到我自己弄明白了这个逻辑,我才注意到其他人在写答案。巧合的是,我们的逻辑是一样的。我试图更详细地解释如何使用代码,并测试了我的代码,以确保它按照问题中提出的方式工作。Base R FTW!我个人觉得使用with阅读会更容易一些,尽管没有保存nchars:df4[withdf4,group%在%group[pop==3],]中。Base R FTW!我个人觉得使用with阅读会更容易一些,尽管没有保存nchars:df4[withdf4,group%在%group[pop==3],]。