在R中更改数据帧对象结构

在R中更改数据帧对象结构,r,dataframe,R,Dataframe,我在R中有一个dataframe对象,其示例如下: 4 5 4 5 4 5 4 6 4 10 4 10 4 10 4 10 4 9 4 9 4 10 4 10 4 6 4 5 12 3 12 4 12 4 12 4 13 8 13 10 13 9 13 12 13 11 13 13 13 12 13 11 0 0 0 0 4 2 0 0 2 6 0 0 0 0 0 0 0 0 0 0 0 0 1 3 0 0 0 0

我在R中有一个dataframe对象,其示例如下:

4   5
4   5
4   5
4   6
4   10
4   10
4   10
4   10
4   9
4   9
4   10
4   10
4   6
4   5
12  3
12  4
12  4
12  4
13  8
13  10
13  9
13  12
13  11
13  13
13  12
13  11
0 0 0 0 4 2 0 0 2 6 0 0 0 0 0 0 0 0 0 0
0 0 1 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 1 1 2 2 1 0 0 0 0 0 0 0
从这个数据框中,我想创建一个包含20列的新数据框(以制作热图),如下所示:

  • 对于
    $1
    中的每个唯一值,新数据帧中只有一行。因此,对于这个示例数据,新的数据帧应该有3行(唯一的4、12、13)

  • $2
    表示新数据帧的列号,其中填充值(新列号)的频率。比如说,
    $1
    值4、5重复4次。因此,在新的数据帧中,第一行的第5列的值应为4

  • 所有其他列值均为零

  • 该数据的样本输出如下所示:

    4   5
    4   5
    4   5
    4   6
    4   10
    4   10
    4   10
    4   10
    4   9
    4   9
    4   10
    4   10
    4   6
    4   5
    12  3
    12  4
    12  4
    12  4
    13  8
    13  10
    13  9
    13  12
    13  11
    13  13
    13  12
    13  11
    
    0 0 0 0 4 2 0 0 2 6 0 0 0 0 0 0 0 0 0 0
    0 0 1 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 1 1 1 2 2 1 0 0 0 0 0 0 0
    

    我们在R怎么做?非常感谢你

    这里有一个使用
    的选项。“诀窍”是将第二列转换为具有适当级别的因子

    df1$X2 <- factor(df1$X2, levels = 1:20)
    out <- as.data.frame(table(df1))
    

    数据

    df1 <- structure(list(X1 = c(4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
    4L, 4L, 4L, 4L, 12L, 12L, 12L, 12L, 13L, 13L, 13L, 13L, 13L, 
    13L, 13L, 13L), X2 = structure(c(5L, 5L, 5L, 6L, 10L, 10L, 10L, 
    10L, 9L, 9L, 10L, 10L, 6L, 5L, 3L, 4L, 4L, 4L, 8L, 10L, 9L, 12L, 
    11L, 13L, 12L, 11L), .Label = c("1", "2", "3", "4", "5", "6", 
    "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", 
    "18", "19", "20"), class = "factor")), .Names = c("X1", "X2"), row.names = c(NA, 
    -26L), class = "data.frame")
    

    df1来自同事的帮助:

    heatmap_func <-function(df){
    levels<-unique(df[,1])
    result<-matrix(0, length(levels), 20)
    for(i in 1:nrow(result)){
    occ<-as.data.frame(table(df[df[,1]==levels[i],2]),stringsAsFactors = F)
    for(j in 1:nrow(occ)){
      result[i,as.numeric(occ[j,1])]<-as.numeric(occ[j,2])
    }
    }
    return(as.data.frame(result))
    }
    
    热图功能