r - 根据特定条件制作新的数据框
问题描述
我在R中有一个数据框对象,示例如下:
4 5 3
4 5 9
4 5 2
4 6 4
4 10 4
4 10 3
4 10 7
4 10 2
4 9 3
4 9 7
4 10 4
4 10 3
4 6 8
4 5 4
12 3 6
12 4 1
12 4 2
12 4 7
从这个数据框中,我想创建一个20列的新数据框,如下所示:
新数据框中只有一行,对于
$1
. 因此对于这个样本数据,新的数据框应该有 2 行(唯一的 4,12)。$2
表示新数据帧的列号,其中$3
要填充(该数据帧的)的值。如果有重复病例,取中值$3
。例如,对于$1
值 4,5 重复 4 次,并且在新数据帧中,第一行的第 5 列应该具有值 median(3,9,2,4) =3。所有其他列值均为零。
此数据的示例输出如下:
0 0 0 0 3 4 0 0 3 4 0 0 0 0 0 0 0 0 0 0
0 0 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
我们如何在 R 中做到这一点?提前非常感谢!
解决方案
你确定你的预期结果是正确的吗?正如评论中所指出的,我认为计算您问题中的中位数存在错误。你可以这样做:
library(dplyr)
df$V1 <- as.numeric(as.factor(df$V1))
values <- df %>% group_by(V1,V2) %>% summarise(median=median(V3))
new_df <- matrix(0,nrow=length(unique(df$V1)), ncol=20)
for(i in 1:nrow(new_df)){
for(j in 1:ncol(new_df)){
value <- values$median[values$V1==i & values$V2==j]
if(length(value)>0){
new_df[i,j] = value
}
}
}
new_df
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20]
[1,] 0 0 0 0 3.5 6 0 0 5 3.5 0 0 0 0 0 0 0 0 0 0
[2,] 0 0 6 2 0.0 0 0 0 0 0.0 0 0 0 0 0 0 0 0 0 0
结果略有不同。
推荐阅读
- subscription - WatchOS 上的 StoreKit 2 订阅状态为空
- javascript - 如何以角度重置对象?
- django - 具有不同占位符的多个 django 表单,我使用表单工厂吗?
- c# - 在 Visual Studio 中部署 SQLCLR -- 如何覆盖生成的发布脚本
- java - 为什么我的文本文件没有被读取和打印?
- vue.js - shallowReadonly 和用反应对象计算之间的区别 (Vue)
- javascript - 为什么添加onClicked监听器的位置会影响代码的运行速度?
- android - 屏幕旋转时如何加载另一个用户界面?
- python - 没有名为“文件夹名称”的模块
- c# - C# 和 Minecraft 服务器启动