在R中,我有一个包含2列,x和y位置的数据框,我需要更改:
df = data.frame(x = c(1,3,2,6,2), y = c(2,1,5,3,5))
我的实际数据框有数千个值。我首先希望添加第三列来显示特定x和y值出现的发生率的数字。例如,如果找到x = 2和y = 5的行两次,那么我们删除其中一行并在行的第三列中放置一个2。
然后我需要将这个3列数据框改为矩阵,其中第三列值是行(x)和列(y)中数组中的值。
最终这是制作一系列热图,这些特殊格式似乎是最好的测试几个包。我自己做了一些尝试,但没有运气。
答案 0 :(得分:1)
这可以通过使用data.table
来实现,如下所示:
df = data.frame(x = c(1,3,2,6,2), y = c(2,1,5,3,5))
library(data.table)
setDT(df)[
# count unique combinations of x-y-values
, .N, by = .(x, y)][
# fill missing to complete heatmap using cross join
CJ(x = 1:max(x), y = 1:max(y)), on = .(x, y)][
# replace NA
is.na(N), N := 0][
# reshape from long to wide
, dcast(.SD, x ~ y)][
# coerce to matrix
, as.matrix(.SD), .SDcols = -"x"]
1 2 3 4 5 [1,] 0 1 0 0 0 [2,] 0 0 0 0 2 [3,] 1 0 0 0 0 [4,] 0 0 0 0 0 [5,] 0 0 0 0 0 [6,] 0 0 1 0 0