1

我有一个大型数据集,我试图离散化并创建一个 3d 曲面图:

  rowColFoVCell wpbCount Feret

1  001001001001       1  0.58

2  001001001001       1  1.30

3  001001001001       1  0.58

4  001001001001       1  0.23

5  001001001001       2  0.23

6  001001001001       2  0.58

该数据集中目前有 695302 行。我试图根据第二列离散第三个“Feret”列,因此对于每个“wpbCount”bin,“Feret”列。

我认为解决方案将涉及使用 cut 但我不知道该怎么做。我想最终得到一个像这样的数据框:

  wpbCount Feret Count

1  1  [0.0,0.2] 3

2  1  [0.2,0.4] 5

3  1  [0.4,0.6] 6

4  1  [0.8,0.8] 9

5  2  [0.0,0.2] 6

6  2  [0.4,0.6] 23
4

3 回答 3

1

这是回答第一部分:

创建一些数据

DF <- data.frame(wpbCount = sample(1:1000, 1000),
                 Feret = sample(seq(0, 1, 0.001), 1000))

1) 离散化 使用 cut with right = FALSE 所以间隔是 [) 我通常发现这比默认值更有用

DF$cut_it <- cut(DF$Feret, right = FALSE,
                 breaks = c(0, 0.2, 0.4, 0.6, 0.8, 1))

2) 聚合
表 <- data.frame(table(DT$cut_it))

编辑另一个尝试

library(data.table)
DT <- data.table(DF)
DT <- DT[, list(wpbCount = length(wpbCount),
                Feret = length(Feret)
                ), by=cut_it]

也许您只是想离散化而不是聚合。尝试这个:

DF2 <- data.frame(wpbCount = sample(1:3, 1000, replace=T),
                 Feret = sample(seq(0, 1, 0.001), 1000))

DF2$Feret2 <- cut(DF$Feret, right = FALSE,
                 breaks = c(0, 0.2, 0.4, 0.6, 0.8, 1.1))

DF2 <- DF2[, c(1, 3)]
于 2013-12-31T04:23:11.357 回答
1

看看这个链接。有一些3d地块。然而,3d 图并不是分析数据的最佳工具。如果您坚持使用 3d 方法,请尝试ggplot2 包中的stat_contout()

然而,一个可能更好的方法是在 2d 中绘制一些图,或者使用 facet_grid()。还请查看 ggplot2当前文档

根据您的上一个答案(未经测试)尝试此操作:

ggplot(DF, aes(wpbCount , x)) +
  geon_point() +
  facet_grid(. ~ bin)

这个想法是使用因子变量(在本例中为 bin)来刻面图。

于 2013-12-31T09:08:13.117 回答
1

非常感谢您的帮助,我在 R 中使用了以下函数:

x$bin <- cut(x$Feret, right = FALSE, breaks = seq(0,max(wpbFeatures$Feret), by=0.1))

y <-aggregate(x$bin, by = x[c('wpbCount', 'bin')], 长度)

根据您的建议,我已经能够获得我需要的数据框:

wpbCount | 垃圾桶 | X

1 [0.2,0.3) 72

2 [0.2,0.3) 142

3 [0.2,0.3) 224

4 [0.2,0.3) 299

5 [0.2,0.3) 421

6 [0.2,0.3) 479

现在我需要在 3D 中绘制它,我不确定如何使用非数字列(即作为因子的 bin 列)来绘制。

有谁知道我如何将这三列相互绘制?

于 2013-12-31T07:40:05.613 回答