从数据框生成仓

使用python我创建了包含相似值的以下数据帧:

  cosinFcolor cosinEdge cosinTexture histoFcolor histoEdge histoTexture    jaccard
1       0.770     0.489        0.388  0.57500000 0.5845137    0.3920000 0.00000000
2       0.067     0.496        0.912  0.13865546 0.6147309    0.6984127 0.00000000
3       0.514     0.426        0.692  0.36440678 0.4787535    0.5198413 0.05882353
4       0.102     0.430        0.739  0.11297071 0.5288008    0.5436508 0.00000000
5       0.560     0.735        0.554  0.48148148 0.8168083    0.4603175 0.00000000
6       0.029     0.302        0.558  0.08547009 0.3928234    0.4603175 0.00000000

我正在尝试编写一个R脚本来生成另一个反映这个bin的数据框架,但是如果值大于0.5,我的binning条件就适用,这样

伪代码:

if (cosinFcolor > 0.5 & cosinFcolor <= 0.6)
   bin = 1
if (cosinFcolor > 0.6 & cosinFcolor <= 0.7)
   bin = 2
if (cosinFcolor > 0.7 & cosinFcolor =< 0.8)
   bin = 3
if (cosinFcolor > 0.8 & cosinFcolor <=0.9)
   bin = 4
if (cosinFcolor > 0.9 & cosinFcolor <= 1.0)
   bin = 5
else
   bin = 0

基于上述逻辑,我想建立一个数据框架

  cosinFcolor cosinEdge cosinTexture histoFcolor histoEdge histoTexture    jaccard
1       3         0         0            1           1        0               0

我如何开始这个脚本,或者我应该在python这样做?在试图找出它的强大程度/机器学习包的数量后,我想要熟悉R。
我的目标是建立一个分类器,但首先我需要熟悉R 🙂

考虑到极值的另一个切入点:

dat <- read.table("clipboard", header=TRUE)

cuts <- apply(dat, 2, cut, c(-Inf,seq(0.5, 1, 0.1), Inf), labels=0:6)
cuts[cuts=="6"] <- "0"
cuts <- as.data.frame(cuts)

  cosinFcolor cosinEdge cosinTexture histoFcolor histoEdge histoTexture jaccard
1           3         0            0           1         1            0       0
2           0         0            5           0         2            2       0
3           1         0            2           0         0            1       0
4           0         0            3           0         1            1       0
5           1         3            1           0         4            0       0
6           0         0            1           0         0            0       0

说明

切割功能根据您指定的切割分为进纸匣。所以让我们拿1:10,把它分成3,5和7。

cut(1:10, c(3, 5, 7))
 [1] <NA>  <NA>  <NA>  (3,5] (3,5] (5,7] (5,7] <NA>  <NA>  <NA> 
Levels: (3,5] (5,7]

你可以看到它是如何构成中断之间的水平的因素。还要注意它不包括3(有一个include.lowest参数,它将包括它)。但是,这些组是令人讨厌的名字,我们称之为组1和组2。

cut(1:10, c(3, 5, 7), labels=1:2)
 [1] <NA> <NA> <NA> 1    1    2    2    <NA> <NA> <NA>

更好,但与NAs有什么关系?他们在我们的边界之外,不计算在内。要算数,在我的解决方案中,我添加了无限和无穷大,所以所有的积分都将包含在内。请注意,由于我们有更多的休息时间,我们需要更多的标签:

x <- cut(1:10, c(-Inf, 3, 5, 7, Inf), labels=1:4)
 [1] 1 1 1 2 2 3 3 4 4 4
Levels: 1 2 3 4

好的,但是我们不想要4(根据你的问题)。我们希望所有的4都在组1中。所以我们来摆脱标有’4’的条目。

x[x=="4"] <- "1"
 [1] 1 1 1 2 2 3 3 1 1 1
Levels: 1 2 3 4

这与我以前做过的略有不同,注意到我以前把所有的最后一个标签都拿走了,但是我已经这样做了,所以你可以更好的看看切割是如何工作的。

好的,应用功能。到目前为止,我们一直在使用单个向量。但是,您希望将其用于一系列向量:数据帧的每一列。这就是申请的第二个论据。 1将该函数应用于所有行,2适用于所有列。将切割功能应用于数据框架的每一列。在应用功能中切割后的所有内容都只是剪切的参数,我们在上面讨论过。

希望有帮助。

http://stackoverflow.com/questions/11963508/generate-bins-from-a-data-frame

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:从数据框生成仓