【发布时间】:2019-03-25 12:48:03
【问题描述】:
我对 R 很陌生,所以我希望有人可以帮助我。我的一个脚本中的输出表是下面的averagetable,显示了三个不同集群中事件Standing 的不同比例:
> print(averagetable)
Group.1 Standing
1 cluster1 0.5642857
2 cluster2 0.7795848
3 cluster3 0.7922980
请注意,每次我运行脚本时,R 可以为 averagetable$Standing 上的值分配不同的集群名称(cluster1、cluster2 或 cluster3)。另一个输出可以是:
> print(averagetable)
Group.1 Standing
1 cluster1 0.7795848
2 cluster2 0.5642857
3 cluster3 0.7922980
另一方面,我的脚本生成tableresults 数据框。请在下面找到head() 示例:
> head(tableresults)
ACTIVITY_X ACTIVITY_Y ACTIVITY_Z winning_cluster
1 19 21 28 cluster3
2 20 14 24 cluster3
3 34 35 49 cluster3
4 18 5 19 cluster2
5 23 27 35 cluster3
6 33 20 39 cluster3
我的问题很简单。我想转换tableresults中的数据,根据三个规则更改winning_cluster列中的字符串:
1) 将Standing 写入tableresults$wining_cluster,将其替换为averagetable 中具有最高Standing 值的集群名称。
2) 在tableresults$wining_cluster 中写入Moving/Feeding,将其替换为在averagetable 中具有第二高Standing 值的集群名称。
3) 将Feeding/Moving 写入tableresults$wining_cluster,将其替换为averagetable 中具有第三高Standing 值的集群名称。
换句话说,这是所需的输出:
> head(tableresults_output)
ACTIVITY_X ACTIVITY_Y ACTIVITY_Z winning_cluster
1 19 21 28 Standing
2 20 14 24 Standing
3 34 35 49 Standing
4 18 5 19 Moving/Feeding
5 23 27 35 Standing
6 33 20 39 Standing
请注意,拥有一个基于值的分层组件非常重要,该组件将根据 averagetable 值分配条件 1) 2) 或 3)。使用以下方法无法解决此问题:
averagetable$classification <- factor(x = as.character(sort(averagetable$Standing)),
labels = c('Feeding/Moving', 'Moving/Feeding','Standing'))
使用此命令,Standing 将始终链接到 cluster1、Moving/Feeding 到 cluster2 和 Feeding/Moving 到 cluster3,并且在重新生成 averagetable 时不一定是这样。
无论如何,感谢您的帮助,我希望我的问题对论坛来说足够有趣。
【问题讨论】:
-
gsub和tail都不适合这样的事情。ACTIVITY_*字段在这个问题的上下文中实际上意味着什么吗?当您说“最高价值”时,您指的是哪个价值?averagetable每个集群中有三个值,tableresults中每行有三个值,我不知道你的意思。 -
合并这些
data.frame可能会更好地解决这个问题,尽管我仍然无法理解这个问题。 -
@NelsonGon 我在我原来的帖子中重新提出了这个问题。希望现在情况更清楚了。
-
你还没有解释
ACTIVITY_*与任何事情有什么关系。而且您在逻辑中使用了两次“平均表中的最高排名值”。 -
你好。我已经修复了原始帖子中的“平均表中的最高常设值”问题。
ACTIVITY_*值不重要。感谢您指出这一点。