【问题标题】:Replace values based on column counts R根据列数替换值 R
【发布时间】:2021-06-08 18:28:10
【问题描述】:

我正在尝试计算一个学生在大学学期开始时尝试替换我数据集中的 NA 值的小时数。我运行以下代码来查找缺失值:

IR_Data %>%
    filter(is.na(IR_Data$HRS_Sem1Attempted))

生成以下数据(我只显示前几列):

      ID TermCode CourseCode Grade GradePoints UGCohort Gender `Race/Ethnicity` Pell  FirstGen
   <dbl>    <dbl>      <dbl> <chr>       <dbl> <chr>    <chr>  <chr>            <lgl> <lgl>   
 1   189   202009        284 W            0    2020     M      White            FALSE FALSE   
 2   189   202009        235 W            0    2020     M      White            FALSE FALSE   
 3   189   202009        304 W            0    2020     M      White            FALSE FALSE   
 4   323   202009          4 B+           3.33 2020     M      Other/Unknown    FALSE TRUE    
 5   323   202009        235 B+          20.0  2020     M      Other/Unknown    FALSE TRUE    
 6   323   202009        159 A           12    2020     M      Other/Unknown    FALSE TRUE    
 7   323   202009        106 A            8    2020     M      Other/Unknown    FALSE TRUE 

如您所见,对于学生上的每一门课,ID 都会重复。对于学生 189 的案例,我们可以看到他们在三个班级中的每个班级都获得了“W”(意为退学)。然而,学生 323 的 4 个班级分别获得了 B+、B+、A 和 A。

我想运行一行代码,将 HRS_Sem1Attempted 中的 NA 值替换为 ID 值乘以三的计数(对于课程小时数)。换句话说,学生 323 会显示 4 * 3 = 12 总尝试小时数,而像学生 189 这样的人会显示 3 * 3 = 9 总尝试小时数。

我写这个是为了按 NA 值过滤并按 ID 分组:

attempts <- IR_Data %>%
              filter(is.na(IR_Data$HRS_Sem1Attempted)) %>%
              group_by(ID) %>%
              count(ID)
attempts

它为每个学生 ID 的总课程生成此表,当前 NA 值:

      ID     n
   <dbl> <int>
 1   189     3
 2   323     4
 3   638     3
 4   827     4
 5   895     4
 6   909     3
 7  1006     5
 8  1292     5
 9  1490     5
10  1515     3
11  1536     4
12  1720     7
13  1825     3
14  1846     4
15  2233     4
16  2292     3

在这一点上,我真的不确定如何用这个计算有效地替换 NA 值。非常感谢任何帮助!r

【问题讨论】:

  • 您能否添加一些有用的数据(例如,您的工作基于您的示例数据中缺少的IR_Data$HRS_Sem1Attempted,并且可能存在无用的列)以及给定上述数据的明确输出示例?

标签: r dataframe for-loop na


【解决方案1】:

使用group_by 按ID 对观察进行分组,然后使用n()*3 将每个ID 组中的条目数mutate 放入HRS_Sem1Attempted 变量中。

dt=read.table(text=text, header=TRUE)
library(dplyr)
dt %>% group_by(ID) %>% mutate(HRS_Sem1Attempted=n()*3)
dt

     ID TermCode CourseCode Grade GradePoints UGCohort Gender X.Race.Ethnicity. HRS_Sem1Attempted
  <int>    <int>      <int> <fct>       <dbl>    <int> <fct>  <fct>                         <dbl>
1   189   202009        284 W            0        2020 M      White                             9
2   189   202009        235 W            0        2020 M      White                             9
3   189   202009        304 W            0        2020 M      White                             9
4   323   202009          4 B+           3.33     2020 M      Other/Unknown                    12
5   323   202009        235 B+          20        2020 M      Other/Unknown                    12
6   323   202009        159 A           12        2020 M      Other/Unknown                    12
7   323   202009        106 A            8        2020 M      Other/Unknown                    12

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-25
    • 2021-06-12
    • 2023-02-14
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    相关资源
    最近更新 更多