数据框列:在这种情况下如何使用循环?

时间:2020-08-21 11:58:29

标签: r loops

我有一个包含两列的数据框:人和点。在我的实际数据集中,有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个独特的人。因此,它似乎无法正常工作。

3 个答案:

答案 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)