Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对字符串数组中与R中的条件匹配的值进行分组_R_Arrays_String_Dataframe_Grouping - Fatal编程技术网

对字符串数组中与R中的条件匹配的值进行分组

对字符串数组中与R中的条件匹配的值进行分组,r,arrays,string,dataframe,grouping,R,Arrays,String,Dataframe,Grouping,我有一个大数据框df1,它有一个列Student,其中学生姓名有字符串值,Grades,考试成绩有数字值。另一个数据框df2,它有三列Classnumeric,FromTo作为分数范围和Count,总结了有多少学生在某个特定班级的某个值之间有特定分数 例如: Stundent <- c("Mark", "Jhon", "Stuart", "Lillie", "Carl", "Jason", "Stewart","Jack") Grades <- c(7,9,1,6,7,6,4,8)

我有一个大数据框
df1
,它有一个列
Student
,其中学生姓名有字符串值,
Grades
,考试成绩有数字值。另一个数据框
df2
,它有三列
Class
numeric,
From
To
作为分数范围和
Count
,总结了有多少学生在某个特定班级的某个值之间有特定分数

例如:

Stundent <- c("Mark", "Jhon", "Stuart", "Lillie", "Carl", "Jason", "Stewart","Jack")
Grades <- c(7,9,1,6,7,6,4,8)
df1 <- data.frame(Stundent,Grades)

Class <- c(101, 101, 201, 308, 507, 201, 507, 308)
from <- c(1,6,1,1,6,6,1,6)
to <- c(5,10,5,5,10,10,5,10)
Count <- c(0,2,1,0,1,1,1,2)
df2 <- data.frame(Class,from,to,Count)
df2 <- df2[order(df2$Class),]

Stundent还不完全清楚。这是循环版本的
。根据预期输出,“df1”中的“Stundent”可能是通过比较“df2”中的“Grades”与“from”、“to”来分配给“df2”中“Stundent”列的每一行,并且选择的“Stundent”的数量受“Count”值的限制。选择“特技凹痕”后,不会再次重复

tmpdat <- df1
tmpdat$Stundent <- as.character(tmpdat$Stundent)

df2$Students <- ""
for(i in seq_len(nrow(df2))) {

       if(df2$Count[i] >0 ) {
        st1 <- head(tmpdat$Stundent[tmpdat$Grades >= df2$from[i] & 
                                    tmpdat$Grades <= df2$to[i]], df2$Count[i])
        tmpdat <- tmpdat[!tmpdat$Stundent %in% st1, ]
        df2$Students[i] <- toString(st1) 

      }

  }




df2
#  Class from to Count    Students
#1   101    1  5     0            
#2   101    6 10     2  Mark, Jhon
#3   201    1  5     1      Stuart
#6   201    6 10     1      Lillie
#4   308    1  5     0            
#8   308    6 10     2 Carl, Jason
#5   507    6 10     1        Jack
#7   507    1  5     1     Stewart

tmpdat我假设在
df1
中应该有另一列
Class
来识别哪个学生在哪个
Class
中,因为没有与数据匹配的信息。如果我的假设不正确,请告诉我,我将删除答案

#adding class column
df1$Class <- c(101, 101, 201, 201, 308, 308, 507, 507)

你能澄清一下df1的学生在哪个班吗?
df1
中的名称列表是否与
df2
完全匹配,因此
df1
中的前两个名称必须在类101中(df2
的前两行)?如何匹配
df1
df2
?在
df1
中不应该有另一列名为
Class
#adding class column
df1$Class <- c(101, 101, 201, 201, 308, 308, 507, 507)
library(dplyr)

df1 %>%
  left_join(df2, by = 'Class') %>%
  group_by(Class, from, to) %>%
  summarise(Stundent = toString(Stundent[Grades >= from & Grades <= to]))


#  Class  from    to Stundent     
#  <dbl> <dbl> <dbl> <chr>        
#1   101     1     5 ""           
#2   101     6    10 "Mark, Jhon" 
#3   201     1     5 "Stuart"     
#4   201     6    10 "Lillie"     
#5   308     1     5 ""           
#6   308     6    10 "Carl, Jason"
#7   507     1     5 "Stewart"    
#8   507     6    10 "Jack"