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

R 数据框列:在这种情况下如何使用循环?,r,loops,R,Loops,我有一个包含两列的数据框:person和points。在我的实际数据集中,有1000多人 我的目标是:我需要找到得分超过126分的人 library(tidyverse) person_filtred <- df1 %>% group_by(person) %>% dplyr::filter(sum(points, na.rm = T)>126) %>% distinct(person) %>% pull() df1: 我使用了以下代码:

我有一个包含两列的数据框:person和points。在我的实际数据集中,有1000多人

我的目标是:我需要找到得分超过126分的人

library(tidyverse)

person_filtred <- df1 %>%
  group_by(person) %>%
  dplyr::filter(sum(points, na.rm = T)>126) %>%
  distinct(person) %>%
  pull()
df1:

我使用了以下代码:

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()
df1 126)%
不同(人)%%>%
拉
人名


当我输入这个代码时,结果我得到了800个唯一的人。但如果我想知道有多少人的分数低于126分,我也会得到800个独特的人。所以它看起来不起作用。

Tidyverse解决方案。返回包含超过126个点的人员的向量

library(tidyverse)

person_filtred <- df1 %>%
  group_by(person) %>%
  dplyr::filter(sum(points, na.rm = T)>126) %>%
  distinct(person) %>%
  pull()
库(tidyverse)
已筛选的人员%
分组单位(人)%>%
dplyr::过滤器(和(点,na.rm=T)>126)%>%
不同(人)%%>%
拉

Tidyverse解决方案。返回包含超过126个点的人员的向量

library(tidyverse)

person_filtred <- df1 %>%
  group_by(person) %>%
  dplyr::filter(sum(points, na.rm = T)>126) %>%
  distinct(person) %>%
  pull()
库(tidyverse)
已筛选的人员%
分组单位(人)%>%
dplyr::过滤器(和(点,na.rm=T)>126)%>%
不同(人)%%>%
拉

使用
摘要
对于本用例更为惯用

library(tidyverse)

person_filtred <- df1 %>%
  group_by(person) %>%
  summarise(totalPoints=sum(points, na.rm=TRUE)) %>%
  filter(totalPoints >= 126)
库(tidyverse)
已筛选的人员%
分组单位(人)%>%
总结(总分=总和(分,na.rm=真))%>%
过滤器(总点数>=126)

使用
摘要
对于本用例更为惯用

library(tidyverse)

person_filtred <- df1 %>%
  group_by(person) %>%
  summarise(totalPoints=sum(points, na.rm=TRUE)) %>%
  filter(totalPoints >= 126)
库(tidyverse)
已筛选的人员%
分组单位(人)%>%
总结(总分=总和(分,na.rm=真))%>%
过滤器(总点数>=126)

也许你可以试试下面的代码

subset(aggregate(.~person,df1,sum), points > 126)


也许你可以试试下面的代码

subset(aggregate(.~person,df1,sum), points > 126)


我得到了这个错误:错误:
filter()
input
.1
有问题。x参数i输入的无效“类型”(字符)
。1
sum(points,na.rm=T)>126
。i错误发生在组1:person=“Try dplyr::filter-有一个stats::filter屏蔽了dplyr函数。我将更新答案以反映。我得到了以下错误:错误:输入
filter()
input
.1
.x无效的参数类型(字符)
。1
sum(points,na.rm=T)>126
.i错误发生在组1:person=“Try dplyr::filter-有一个stats::filter屏蔽了dplyr函数。我将更新答案以反映。不幸的是,我再次出错。错误:
summary()
input
totalpoints
有问题。x参数i输入的无效“类型”(字符)
totalpoints
sum(points,na.rm=T)
。i第1组中出现错误:person=“看起来您需要将
强制为带有
as.numeric(points)
的数字。我已经这样做了,当我使用class(df1$points)时,我得到了一个分数是数字的答案。请用一个错误更新您的问题。不幸的是,我再次遇到错误。错误:
summary()有问题
input
totalpoints
.x参数的无效“类型”(字符)i input
totalpoints
is
sum(points,na.rm=T)
.i组1中出现错误:person=”看起来您需要强制
为数值,而
as.numeric(points)
我已经这样做了,当我使用class(df1$points)时,我得到的答案是分数是数字。请用数字更新你的问题。如果没有数据供我们使用,这是不可复制的。使用
dput(head(df1))
生成一个小的测试数据组您的代码不起作用,因为
points\u to\u numeric
没有分组,因为它不在
df1
对象中,它应该是
df1$points如果没有数据供我们使用,这是不可复制的。使用
dput(head(df1))
生成一个小的测试数据集您的代码不工作,因为
points\u to\u numeric
没有分组,因为它不在
df1
对象中,它应该是
df1$points