R:制作分组变量和频率的数据矩阵[重复]

问题描述 投票:0回答:2

这个问题在这里已有答案:

我有一个数据框有三个类别,学生成绩(成绩),学生报告的1-5值,任务是多么容易(水平),报告每个1-5值(百分比)的学生百分比,例如,

grade <- c('A','A','A','A','B','B','B','B','C+','C+','C+','C-','C-','C-','D','D','N','N')
level <- c(2,3,4,5,2,3,4,5,2,3,4,2,3,4,2,3,1,3)
percentage <- c(0.8403361,12.605042,12.605042,0.8403361,2.5210084,
                23.5294118,10.9243697, 2.5210084, 4.2016807, 11.7647059, 
                5.8823529, 0.8403361, 4.2016807, 1.6806723, 0.8403361, 
                2.5210084, 0.8403361, 0.8403361)

df <- data.frame(grade, level, percentage)

grade level percentage
A      2    0.8403361
A      3    12.605042
A      4    12.605042
A      5    0.8403361
B      2    2.5210084
B      3    23.5294118
B      4    10.9243697
B      5    2.5210084
C+     2    4.2016807
C+     3    11.7647059
C+     4    5.8823529
C-     2    0.8403361
C-     3    4.2016807
C-     4    1.6806723
D      2    0.8403361
D      3    2.5210084
N      1    0.8403361
N      3    0.8403361

请注意,除了“N”之外,所有等级都缺少“容易度”(等级)1。

现在我需要将这些数据放入类似矩阵的方式,看起来应该是这样的,

            A           B           C+          C-          D           N
1           0           0           0           0           0   0.8403361
2   0.8403361   2.5210084   4.2016807   0.8403361   0.8403361           0
3   12.605042   23.5294118  11.7647059  4.2016807   2.5210084   0.8403361
4   12.605042   10.9243697  5.8823529   1.6806723          0            0
5   0.8403361   2.5210084           0           0          0            0

你可以帮我用R代码转换数据帧吗?在这里,我希望R代码查找“1”级别,即使它们可能在频率表中丢失。是否应事先将“1”级别和0%的百分比引入表中,还是以某种方式自动化? (通过ifelse检查)

r dataframe matrix
2个回答
0
投票

你可以使用dcast包中的reshape2

library(reshape2)
dcast(df, formula="level~grade", fill=0, value.var="percentage")

0
投票

使用tidyr,您可以使用spread解决这个问题:

library(tidyr)
spread(data = df, key = grade, value = percentage, fill = 0)

#   level          A         B        C-        C+         D         N
# 1     1  0.0000000  0.000000 0.0000000  0.000000 0.0000000 0.8403361
# 2     2  0.8403361  2.521008 0.8403361  4.201681 0.8403361 0.0000000
# 3     3 12.6050420 23.529412 4.2016807 11.764706 2.5210084 0.8403361
# 4     4 12.6050420 10.924370 1.6806723  5.882353 0.0000000 0.0000000
# 5     5  0.8403361  2.521008 0.0000000  0.000000 0.0000000 0.0000000

fill = 0确保缺少的值用0而不是默认的NA填充

© www.soinside.com 2019 - 2024. All rights reserved.