【发布时间】:2015-10-06 20:20:04
【问题描述】:
我正在使用 sm 包中的函数 binning 来获取绘制的 x,y 坐标并将它们放入离散的 bin 中。这将创建一个频率表,其中 bin 的数量由用户输入的 SampleSize 决定。
num_bins <- max(x_max,y_max)/SampleSize
bin_breaks <- matrix(c(bins,bins), num_bins+1,2)
frequency <- binning(combo_points,breaks=bin_breaks,nbins=num_bins)$table.freq
我的“频率”表的输出格式...
x1 x2 x3 x4 x5...
y1 0 5
y2 0
y3 0
y4
y5
.
.
.
但我需要将其转换为 x 和 y 的所有值的列表格式...
x y count
1 1 0
1 2 0
1 3 0
2 1 5
. . .
. . .
我想将此表转换为 x,y,count 的 data.frame 列表,其中 x 和 y 现在实际上只是 bin 本身的 x,y 坐标。我目前这样做是通过设置一个 data.frame 来列出 bin 坐标(freq_points$x 和 freq_points$y),然后运行一个 for 循环来搜索表中与每行的值匹配的数据我的 freq_points data.frame 来创建一个新的向量 (z),for 循环的每次迭代都会附加到这个向量...但是有超过 340 万个 bin,这个过程需要几个小时。
for (i in 1:length(frequency)){
z<-append(z,frequency[freq_points$y[i],freq_points$x[i]])}
有人可以推荐一个更优雅的解决方案吗?有没有更直接的方法将表格转换为列表?我是 R 的新手,也许我在这里错误地使用了术语“表”和“列表”。我希望上面给出的格式有助于澄清我的问题。
将以下答案应用于我的数据时遇到了一些麻烦,这些数据没有 x1,x2,y1,y2 作为实际的行和列标题名称。我用这些来试图表达我的观点,但似乎引起了更多的混乱。为此,我深表歉意。使用@neerajt 提供的小矩阵...我不明白输出以及为什么给出 count.1、count.2 和 count.3。这些“计数”列都不能与 x,y 坐标一起使用。你能解释一下吗?
freq <- matrix(c(0,0,1,5,0,1,1,0,1,1,1,0),nrow=4,ncol=3)
freq
[,1] [,2] [,3]
[1,] 0 0 1
[2,] 0 1 1
[3,] 1 1 1
[4,] 5 0 0
counts <- unlist(freq)
xname <- rep(c(1:ncol(freq)),nrow(freq))
yname <- rep(c(1:nrow(freq)),ncol(freq))
z <- data.frame(x=xname, y=yname, count=counts, row.names=NULL)
z
x y count.1 count.2 count.3
1 1 1 0 0 1
2 2 2 0 1 1
3 3 3 1 1 1
4 1 4 5 0 0
5 2 1 0 0 1
6 3 2 0 1 1
7 1 3 1 1 1
8 2 4 5 0 0
9 3 1 0 0 1
10 1 2 0 1 1
11 2 3 1 1 1
12 3 4 5 0 0
【问题讨论】:
-
你能
dput频率吗 -
你试过
as.data.frame(frequency)吗? -
as.data.frame 没有将表中的数据结构更改为 3 列 (x,y,z) data.frame。
-
有没有办法可以发布我的“频率”输出表?我找不到将其插入原始问题的方法。我既是 R 新手,也是 SO 新手。他们俩都很棒!!!
-
你能用
dput(frequency[1:5, 1:5])的输出编辑你的问题吗,正如迈克尔斯的建议,我认为应该有效