我想导入数据并在r中进行整理。我已经获得了一些我想要在Excel中使用函数的结果,但是这很繁琐,并且每次获得带有更新数据的新Excel文件时都必须手动重做。我有一个Excel文件,每个时间段都有单独的工作表。该Excel文件每年更新多次,保持相同的样式,但添加其他数据,包括添加其他时间段工作表。每个工作表都采用相同的格式,如下所示:
Student_ID| Major_ID | Gender | Age | Semester_Registered | Marital_Status | Home_State
20130001 | 10022 | M | 22 | 3 | S | AZ
20130002 | 10022 | F | 23 | 5 | M | CA
20140001 | 10022 | M | 21 | 3 | M | CA
20140004 | 10034 | F | 24 | 4 | S | AZ
这将是给定时间段工作表的前几条记录的示例,例如2016_Semester_1。学生ID在注册课程时分配给学生,并用作唯一标识符。 Major_ID对应于具有Major_ID和Major_Name和Campus的表。每个工作表的代码保持不变,但是学生可以更改专业或更改校园,因此,给定学生的Major_ID在一个时间段与另一个时间段可以不同。性别和年龄是不言而喻的。 Semester_Registered是从1到8的数字。当学生首次注册课程时,他们在Semester_Registered 1中,然后他们在第一年的第二个学期应该升级到2,在他们的大二学期的第一个学期应该进入3 ,直到他们高三的第二学期一直到8。但是,有些学生没有按照正常的学期顺序学习,例如,由于课程失败而不得不重读一个学期,或者为了赚更多的钱而不得不离开大学一段时间后才返回并继续他们的学习。 Marital_Status是S(单身),M(已婚),D(离婚)或W(丧偶)。 Home_State是学生所在的美国州的两个字母的缩写,主要需要查看学生是否符合本州学费的资格,但对于查看大多数学生来自何处并将营销活动重点放在这些州的报告也很有用。
我拥有的Excel工作簿包含2014_1至2019_1每个学期的工作表。我想要合并数据并以两种主要方式对其进行整理。首先,我想为每个新生课程创建新表,仅包括那些在2014_1学期的Semester_Registered 1在一个表中,在2015_1学期的另一表的,直到2019_1的那些表。我想要在这些表中的数据的标题如下:
First_Semester | Student_ID | Major_ID_Start | Gender | Age_Start | Marital_Status_Start | Final_Semester_Time | Final_Semester_Registered | Graduated_On_Time | Graduated_Late | Major_ID_End | Age_End | Marital_Status_End | Still_Enrolled
给定表中的所有记录将具有相同的First_Semester值,例如2014_1或2015_1。 Student_ID是标识符。 Maojor_ID_Start是学生在第一学期拥有的Major_ID。可以从第一学期只收集一次性别。 Age_Start和Marital_Status_Start是各自的值,如First_Semester中所列。 Final_Semester_Registered需要仔细阅读每个时间段的工作表,直到发现给定的Student_ID不再出现在注册学生列表中为止。对于已毕业的学生,这应该是Semester_Registered等于8的时间段,但是有些学生在毕业前辍学,因此这将显示他们在退出之前最后一次注册的时间段。 “ Final_Semester_Registered”显示Final_Semester_Time中“ Semester_Registered”的值,如果学生毕业,则该值为8;否则,它将显示该学生在辍学之前的学习水平。 Graduated_On_Time是对还是错,如果学生出现在Semester_Register的第一学年后的正好4年之后才出现,则为true,例如,一名学生于2014_1毕业,并于2018_2年底毕业。 Graduated_Late还是对还是错,如果学生在其第一学期的四年后的某个时候达到Semester_Registered 8,则为true。 Major_ID_End显示给定的Student_ID出现在注册学生列表中的最后一个学期的最后注册的Major_ID,并且与Major_ID_Start进行比较以查看该学生是否更改了专业非常有用。 Age_End和Marital_Status_End在Final_Semester_Time的时间段内记录了各自的值。 Still_Enrolled是对还是错,如果在最近的时间段工作表中仍存在Student_ID,则为true,目前为2019_1,但最好是将来进行此更新以使用包含在其中的最新时间段。数据(例如,自从几个月后,我们将输入包含2019_2的新数据)。
第二,我想要一个仅显示最近时间不再注册的学生的Student_ID的表格。列标题如下:
First_Semester | Student_ID | Major_ID_Start | Gender | Age_Start | Marital_Status_Start | Final_Semester_Time | Final_Semester_Registered | Graduated_On_Time | Graduated_Late | Dropped_Out | Major_ID_End | Age_End | Marital_Status_End
这些列与其他示例相同,但Dropped_Out除外,该列为true或false,并且如果学生的Final_Semester_Registered小于8,则为true。此处的关键点在于,该表应仅包括其中的Student_ID Still_Enrolled是错误的,它是过去曾就读过大学但不再入学的所有学生的综合列表,从而可以对按时毕业的人,迟到毕业的人和辍学的人进行分析。
我已经使用Excel实现了其中一些结果,但这是一个手工绘制的过程,每次更新数据文件时都必须重新进行。 Excel在加载文件和更新公式计算方面也变得相当慢,因此我想将其移至r统计软件。但是,作为参考,下面是我在Excel中使用的一些公式,以了解可能适用于r的概念。
我有一个统一的表,其中每个Student_ID为一行,它包括诸如以下的列: 学生编号| Major_ID_2014_1 | Major_ID_2014_2 | Major_ID_2015_1 | Semester_Registered_2014_1 | Semester_Registered_2014_2 | Semester_Registered_2014_2 | Final_Semester_Time | Final_Semester_Registered |年龄开始| Age_End 这是缩写,因为它同时包含从2014_1到2019_1的Major_Id和Semester_Registered列,但是在我的示例中,我只显示了2015_1来提出这个想法。 Major_ID_2041_1的公式为= IFERROR(INDEX(Semester_2014_1,MATCH(Student_ID_Cell,Student_IDs_2014_1,0)),“”),其中Semester_2014_1和Student_IDs_2014_1的命名范围是时间2014_1的工作表中的范围,包括相关行。类似的公式将与Semester_Registered相关的行使用不同的命名数据集。然后我可以在2014_1至2019_1的Major_ID单元格范围内使用= IF(SUMPRODUCT(1 / COUNTIF(F3:R3,F3:R3))<3,FALSE,TRUE)到看看Major_ID是否改变(意味着学生改变了专业或改变了校园),我可以对Semester_Registered的列数范围使用MAX()公式来查找学生达到的最高学期。像= LOOKUP(2,1 /(V3:AH3 <>“”),$ V $ 2:$ AH $ 2)之类的公式遍历Seester_Registered的相同列范围,其中第二行的标题为2014_1、2014_2,等等返回不为空的最后一列(因此返回学生注册的最后一列)。然后可以将其与INDIRECT()一起使用,以引用命名的数据集(我必须按时间段手动命名每个工作表中的所有数据集),例如= IFERROR(INDEX(INDEX(INDIRECT(CONCATENATE(“ DATA_”, AK3)),MATCH(T3,INDIRECT(CONCATENATE(“ Student_IDs _”,AK3)),0),4),“”),其中AK3包含Final_Semester_Time,例如2014_1。