使用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脚本来生成另一个反映条柱的数据框,但如果值大于0.5,则我的条柱条件适用,即
伪代码:
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:)
4条答案
按热度按时间zpgglvta1#
另一个考虑到极值的简化答案是:
解释
cut函数根据你指定的切割分割成各个bin,所以我们取1:10,分别分割成3,5和7。
你可以看到它是如何产生一个因子的,其中的水平是在两个断点之间的水平,还注意到它不包括3(有一个
include.lowest
参数将包括它),但是这些组的名字很糟糕,我们称它们为组1和组2。更好,但是NA是怎么回事?它们在我们的边界之外,没有被计算在内。为了计算它们,在我的解中,我添加了-infinity和infinity,所以所有的点都包括在内。注意,随着我们有更多的中断,我们需要更多的标签:
好的,但是我们不想要4(根据你的问题)。我们希望所有的4都在组1中。所以让我们去掉标记为"4"的条目。
这和我之前做的有点不同,注意我之前去掉了最后所有的标签,但是我在这里是这样做的,所以你可以更好地看到
cut
是如何工作的。好的,
apply
函数,到目前为止,我们只在一个向量上使用了cut,但是你想在一个向量集合上使用它:数据框的每一列。这就是apply
的第二个参数所做的。1将函数应用于所有行,2应用于所有列。将cut
函数应用于数据框的每一列。apply函数中cut
之后的所有内容都只是cut
的参数,我们上面讨论过。hgtggwj02#
您也可以使用
findInterval
:hgb9j2n63#
切起来很容易
bkkx9g8r4#
下面是使用mltools包中的
bin_data()
函数的另一个解决方案。合并一个向量
将 Dataframe 中的每一列合并