在R中更改数据帧对象结构
我在R中有一个dataframe对象,其示例如下:在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
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列的值应为44 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))
}
热图功能