r - R数据框中的交叉制表
问题描述
我在 R 中有一个数据框:
Subject T O E P Score
1 0 1 0 1 256
2 1 0 1 0 325
2 0 1 0 1 125
3 0 1 0 1 27
4 0 0 0 1 87
5 0 1 0 1 125
6 0 1 1 1 100
这只是数据框的显示。实际上,每个科目我都有很多台词。但是科目只有1到6
对于每个主题,可能的值为:
T : 0 或 1
O : 0 或 1
E : 0 或 1
P : 0 或 1
- 分数:数值
我想创建一个新的数据框,其中包含 6 行(每个主题一个)和每个组合的计算 MEAN 分数:
T、O、E、P、TO、TE、TP、OE、OP、PE、TOP、TOE、POE、PET
以上将是新数据框的列。
最终输出应如下所示
Subject T O E P TO TE TP OE OP PE TOP TOE POE PET
1
2
3
4
5
6
对于这些行 x 列中的每一行,其值为 MEAN SCORE
我试过了aggregate
,table
但我似乎无法得到我想要的
对不起,我是 R 新手
谢谢
解决方案
我不得不重建样本数据来回答我理解的问题,告诉我它是否适合你:
set.seed(2)
df <- data.frame(subject=sample(1:3,9,T),
T = sample(c(0,1),9,T),
O = sample(c(0,1),9,T),
E = sample(c(0,1),9,T),
P = sample(c(0,1),9,T),
score=round(rnorm(9,10,3)))
# subject T O E P score
# 1 1 1 0 0 1 12
# 2 3 1 0 1 0 9
# 3 2 0 1 0 1 13
# 4 1 1 0 0 0 3
# 5 3 0 1 0 1 14
# 6 3 0 0 1 0 13
# 7 1 1 0 1 0 17
# 8 3 1 0 1 0 12
# 9 2 0 0 1 1 14
cols1 <- c("T","O","E","P")
df$comb <- apply(df[cols1],1,function(x) paste(names(df[cols1])[as.logical(x)],collapse=""))
# subject T O E P score comb
# 1 1 1 0 0 1 12 TP
# 2 3 1 0 1 0 9 TE
# 3 2 0 1 0 1 13 OP
# 4 1 1 0 0 0 3 T
# 5 3 0 1 0 1 14 OP
# 6 3 0 0 1 0 13 E
# 7 1 1 0 1 0 17 TE
# 8 3 1 0 1 0 12 TE
# 9 2 0 0 1 1 14 EP
library(tidyverse)
df %>%
group_by(subject,comb) %>%
summarize(score=mean(score)) %>%
spread(comb,score) %>%
ungroup
# # A tibble: 3 x 7
# subject E EP OP T TE TP
# * <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 1 NA NA NA 3 17.0 12
# 2 2 NA 14 13 NA NA NA
# 3 3 13 NA 14 NA 10.5 NA
基础 R 中的第二步:
means <- aggregate(score ~ subject + comb,df,mean)
means2 <- reshape(means,timevar="comb",idvar="subject",direction="wide")
setNames(means2,c("subject",sort(unique(df$comb))))
# subject E EP OP T TE TP
# 1 3 13 NA 14 NA 10.5 NA
# 2 2 NA 14 13 NA NA NA
# 5 1 NA NA NA 3 17.0 12
推荐阅读
- python - Matplotlib 的默认 GUI 后端是什么?
- javascript - 在Nodejs中将Buffer数据对象转换为数组
- c++ - reinterpret_cast 添加 const
- c - Linux 内核中的内存映射 - vamlloc() 和 kmalloc() 的使用
- android - 如何将 Samsung Galaxy Watch active 与我的 Android 应用程序连接?
- java - 在我输入问题的数量和难度后,它会停止运行
- angular - 如何使用量角器单击传单地图的中心
- java - 实体在实体管理器上调用合并后失去状态
- google-cloud-platform - 在谷歌云平台上传输文件.error
- reactjs - 如何在文件内的反应js中传递数据