我正在使用binning
包中的函数sm
来绘制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
输出我的频率&#39;表的格式为......
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 for循环的每次迭代附加到...但是有超过340万个bin,这个过程需要几个小时。
for (i in 1:length(frequency)){
z<-append(z,frequency[freq_points$y[i],freq_points$x[i]])}
有人可以推荐更优雅的解决方案吗?是否有更直接的方法从表转换为列表?我在R中很新,也许我使用的是“表格”和“#39;和&#39;列出&#39;这里不正确。我希望上面给出的格式有助于澄清我的问题。
输出来自&#39;输出(频率)&#39;将以下答案应用于我的数据时遇到了一些问题,而这些数据没有x1,x2,y1,y2作为实际的行和列标题名称。我正在使用那些试图弄清楚我的观点,但似乎引起了更多的困惑。为此,我道歉。使用@neerajt提供的小矩阵...我不理解输出以及为什么给出count.1,count.2和count.3。这些都不算数&#39;列可以与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
答案 0 :(得分:0)
这是你可以尝试的东西。如果您有一个freq
表,如下所示:
freq = data.frame(x1=c(0,0,1,5), x2=c(0,1,1,0), x3=c(1,1,1,0))
row.names(freq) <- c("y1", "y2", "y3", "y4")
x1 x2 x3
y1 0 0 1
y2 0 1 1
y3 1 1 1
y4 5 0 0
然后
counts = unlist(freq)
xname = rep(names(freq), nrow(freq))
yname = rep(row.names(freq), length(freq))
z = data.frame(x = xname, y = yname, count = counts, row.names=NULL)
z
将返回
x y count
1 x1 y1 0
2 x2 y2 0
3 x3 y3 1
4 x1 y4 5
5 x2 y1 0
6 x3 y2 1
7 x1 y3 1
8 x2 y4 0
9 x3 y1 1
10 x1 y2 1
11 x2 y3 1
12 x3 y4 0
希望能让你走近。主要的内容是unlist()
操作。
当涉及到术语时,两者都是表格,或者更具体地说是R中的data.frames
。区别在于您的原始表格(frequency
)是宽格式,您(z
)的表格是长格式。 This article很好地说明了这个想法。
答案 1 :(得分:0)
来自&#39; binning&#39;的输出频率表操作产生的表不是data.frame,因此在将其应用为.data.frame(频率)之前,使用unlist()函数将无法正常工作。
xname <- rep(1:ncol(frequency),times=1,each=nrow(frequency))
yname <- rep(1:nrow(frequency),times=ncol(frequency),each=1)
z <- unlist(as.data.frame(frequency))
df <- data.frame(x=xname, y=yname, z=count)
另外,请注意@neerajt提议的复制功能需要包括每个&#39;函数以创建正确的x,y坐标列表,以便它对应于'unlist()&#39;的方式。准备计数数据作为矢量。
unlist()提供了将计算时间转换为几秒钟的关键。谢谢大家的帮助。