When tables are imported from CSV files they are usually imported as data.frames and the values are characters and not numeric. Hence it is impossible to use the table unless the data is converted to a numeric data type.
The conversion of a single variable to the numeric data type in R involves passing the variable to the function as.numeric().
var_in_numeric_dtype = as.numeric(var_in_char_dtype)
For tables (matrices), the as.numeric() function has to be recursively applied using the apply() function (I seem to have more control with apply() than sapply()).
> alg2 = apply(alg[,c(1:4)],c(1,2),as.numeric) Mean grade Std Total students # of fails X2016S1 77.00 14.00 5 1 X2016S2 74.00 14.00 11 3 X2016S3 85.00 12.00 20 1 X2017S1 72.00 21.00 22 5 X2017S2 57.45 38.28 7 3 X2018S1 73.91 21.56 17 3 X2018S2 83.20 6.62 9 0 X2018S3 69.98 22.44 14 4 Spring.2019 69.63 28.62 19 2
alg2 is a matrix consisting of numerical values on which we can perform mathematical operations. We can recalculate the column “fail rate” (which we had to drop as it was not numeric) now using columns 3 ( “# of fails”) and 4 (“Total students”).
> failrate = alg2[,4]/alg2[,3]*100 X2016S1 X2016S2 X2016S3 X2017S1 X2017S2 X2018S1 X2018S2 X2018S3 Spring.2019 20.00000 27.27273 5.00000 22.72727 42.85714 17.64706 0.00000 28.57143 10.52632 > alg = cbind(alg2, failrate) Mean grade Std Total students # of fails failrate X2016S1 77.00 14.00 5 1 20.00000 X2016S2 74.00 14.00 11 3 27.27273 X2016S3 85.00 12.00 20 1 5.00000 X2017S1 72.00 21.00 22 5 22.72727 X2017S2 57.45 38.28 7 3 42.85714 X2018S1 73.91 21.56 17 3 17.64706 X2018S2 83.20 6.62 9 0 0.00000 X2018S3 69.98 22.44 14 4 28.57143 Spring.2019 69.63 28.62 19 2 10.52632