我有一个包含两列的数据框:人和点。在我的实际数据集中,有1000多人。
我的目标:我需要找到得分超过126分的人。
df1:
person points
abc
abc 1
abc
abc 2
abc1
abc1 1
abc1
我使用了以下代码:
df1 <- read.csv("df1.csv")
points_to_numeric <- as.numeric(df1$points)
person_filtered <- df1 %>%
group_by(person) %>%
dplyr::filter(sum(points_to_numeric, na.rm = T)>126)%>%
distinct(person) %>%
pull()
person_filtered
输入此代码后,我得到了800个独特的人。但是,如果我想知道有多少人的总分低于126分,那么我还会得到800个独特的人。因此,它似乎无法正常工作。
答案 0 :(得分:2)
Tidyverse解决方案。返回具有超过126分的人员的向量。
library(tidyverse)
person_filtred <- df1 %>%
group_by(person) %>%
dplyr::filter(sum(points, na.rm = T)>126) %>%
distinct(person) %>%
pull()
答案 1 :(得分:0)
在这种情况下,使用summarise
更为习惯。
library(tidyverse)
person_filtred <- df1 %>%
group_by(person) %>%
summarise(totalPoints=sum(points, na.rm=TRUE)) %>%
filter(totalPoints >= 126)
答案 2 :(得分:0)
也许您可以尝试下面的代码
subset(aggregate(.~person,df1,sum), points > 126)
或
subset(df1,ave(points,persion,FUN = sum)>126)