在R中将多列除以一列时出错

时间:2019-03-14 12:08:15

标签: r dataframe

这是我正在使用的数据的示例:

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 > VigilanceHead-upGrazingBrowsingMoving,{ {1}} Grooming列中的值。我正在使用以下命令,但收到错误消息。所有列的行数均相同:

Resting

我做错什么了吗?任何输入表示赞赏!

我将按照其中一项评论的建议提供以下完整的数据集:

Total

4 个答案:

答案 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]))