这是我正在使用的数据的示例:
uniq
我只想将值> head(tableresults)
ACTIVITY_X ACTIVITY_Y ACTIVITY_Z Vigilance Head-up Grazing Browsing Moving Grooming Resting
1: 40 47 62 0 41 0 0 0 0 0
2: 60 74 95 0 72 0 0 0 5 0
3: 62 63 88 0 80 0 0 0 0 0
4: 60 56 82 0 80 0 0 0 0 0
5: 66 61 90 0 80 0 0 0 0 0
6: 60 53 80 0 80 0 0 0 0 0
Fleeing Total Event winning_cluster
1: 0 41 Head-up cluster2
2: 0 80 Grooming cluster4
3: 0 80 Head-up cluster4
4: 0 80 Head-up cluster4
5: 0 80 Head-up cluster4
6: 0 80 Head-up cluster4
>
,Vigilance
,Head-up
,Grazing
,Browsing
,Moving
,{ {1}} Grooming
列中的值。我正在使用以下命令,但收到错误消息。所有列的行数均相同:
Resting
我做错什么了吗?任何输入表示赞赏!
我将按照其中一项评论的建议提供以下完整的数据集:
Total
答案 0 :(得分:1)
您可以使用mutate_at
修改这些字段,如下所示:
> library(dplyr)
> tableresults <- tableresults %>%
mutate_at(.vars = vars(Vigilance:Fleeing),
.funs = funs(. / Total))
> head(tableresults)
ACTIVITY_X ACTIVITY_Y ACTIVITY_Z Vigilance Head-up Grazing Browsing Moving Grooming
1 40 47 62 0 1.0 0 0 0 0.0000
2 60 74 95 0 0.9 0 0 0 0.0625
3 62 63 88 0 1.0 0 0 0 0.0000
4 60 56 82 0 1.0 0 0 0 0.0000
5 66 61 90 0 1.0 0 0 0 0.0000
6 60 53 80 0 1.0 0 0 0 0.0000
Resting Fleeing Total Event winning_cluster
1 0 0 41 Head-up cluster2
2 0 0 80 Grooming cluster4
3 0 0 80 Head-up cluster4
4 0 0 80 Head-up cluster4
5 0 0 80 Head-up cluster4
6 0 0 80 Head-up cluster4
答案 1 :(得分:0)
您可以使用清除功能来解决:
sweep(tableresults[,4:11], 2, tableresults[,12], `/`)
简单的操作/仅适用于一个向量与一个向量。相反,您正在尝试将两个向量与一个向量相除。
答案 2 :(得分:0)
一个简单的解决方案:
tableresults[,4:11] / tableresults[[12]]
这将使tableresults[[12]]
成为向量,并且应该可以工作。
答案 3 :(得分:0)
我认为这是由于对大小不等的矩阵进行了元素划分。给下面一个镜头:
tableresults[ ,4:11] / rep(tableresults[ ,12], ncol(tableresults[ ,4:11]))