首页 > 解决方案 > 根据特定条件制作新的数据框

问题描述

我在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. 新数据框中只有一行,对于$1. 因此对于这个样本数据,新的数据框应该有 2 行(唯一的 4,12)。

  2. $2表示新数据帧的列号,其中$3要填充(该数据帧的)的值。如果有重复病例,取中值$3。例如,对于 $1值 4,5 重复 4 次,并且在新数据帧中,第一行的第 5 列应该具有值 median(3,9,2,4) =3。

  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 中做到这一点?提前非常感谢!

标签: rdataframe

解决方案


你确定你的预期结果是正确的吗?正如评论中所指出的,我认为计算您问题中的中位数存在错误。你可以这样做:

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

结果略有不同。


推荐阅读