通过 dplyr 过滤并保存数据框中的一系列对象

Filter and save a series of object in the dataframe by dplyr

我想在数据框中保存一个对象列表。我想知道它是否适用于 R 编程。这里有几个不同class:

统计期中成绩的假数据
name <- c('John','Mary','George','Sam','Bruce','Kiki','Jossef','Chen','Bob','May')
score_sample <- sample(1:100, 10, replace = TRUE)
eco_1A <- data.frame(name = name , score = score_sample)

我想知道哪个学生通过了考试,结果是这样的:

class <- c('eco_1A','eco_1B','soc_1A','BA_1A','BA_1B')
pass_name_sheet <- c('Mary,Sam','Bruce','Jack','Kiki,Cheng,Bob','Jossef' )
all_score <- data.frame(class = class ,pass_name_sheet = pass_name_sheet)

我想知道每个class.

通过考试的学生的名字

我该怎么办?

您似乎在尝试按通过的学生过滤数据集。假设您的数据集包含三列:

'class' - class 学生注册。 'pass_name_sheet' - 学生姓名。 'all_score' - 学生的分数。

假设及格分数是70,你可以用这个命令找到通过的同学:

passed_students <- dataset[which(dataset$all_score >= 70),]$pass_name_sheet

此命令仅获取分数等于或高于 70 分的观察结果,并获取这些学生的姓名。如果您想获取这些学生的所有列,只需从命令末尾删除“$pass_name_sheet”即可。

dplyr 工作流是:

library(dplyr)

mget(class[class %in% ls()]) %>%
  bind_rows(.id = "class") %>%
  filter(score >= 60) %>%
  group_by(class) %>%
  summarise(pass_name_sheet = toString(name))

# # A tibble: 2 x 2
#   class  pass_name_sheet          
#   <chr>  <chr>                    
# 1 BA_1A  Mary, Chen, May          
# 2 eco_1A John, George, Sam, Jossef

如果您要对这些名称进行进一步分析,建议将它们存储为 list-column,即

... %>%
  summarise(pass_name_sheet = list(name))

# # A tibble: 2 x 2
#   class  pass_name_sheet
#   <chr>  <list>         
# 1 BA_1A  <chr [3]>      
# 2 eco_1A <chr [4]> 

数据
class <- c('eco_1A', 'BA_1A')

BA_1A <- structure(list(name = c("John", "Mary", "George", "Sam", "Bruce", 
"Kiki", "Jossef", "Chen", "Bob", "May"), score = c(11L, 82L, 1L, 8L, 37L,
43L, 6L, 93L, 9L, 84L)), class = "data.frame", row.names = c(NA, -10L))

eco_1A <- structure(list(name = c("John", "Mary", "George", "Sam", "Bruce", 
"Kiki", "Jossef", "Chen", "Bob", "May"), score = c(82L, 32L, 61L, 94L, 58L,
25L, 64L, 5L, 15L, 48L)), class = "data.frame", row.names = c(NA, -10L))