通过 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))
我想在数据框中保存一个对象列表。我想知道它是否适用于 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))