在没有循环的情况下对R数据帧执行选择性操作

在没有循环的情况下对R数据帧执行选择性操作,r,plyr,R,Plyr,我有这个数据框 | A | B | C | Output | |---------|---------|---------|--------| | NoFault | NoFault | NoFault | 8 | | Fault | NoFault | NoFault | 2 | | NoFault | Fault | NoFault | 0 | | Fault | Fault | NoFault | 2

我有这个数据框

|    A    |    B    |    C    | Output |
|---------|---------|---------|--------|
| NoFault | NoFault | NoFault |   8    |
|  Fault  | NoFault | NoFault |   2    |
| NoFault |  Fault  | NoFault |   0    |
|  Fault  |  Fault  | NoFault |   2    |
| NoFault | NoFault |  Fault  |   2    |
|  Fault  | NoFault |  Fault  |   0    |
| NoFault |  Fault  |  Fault  |   2    |
|  Fault  |  Fault  |  Fault  |   4    |
我已使用以下代码生成了此代码:

A <- c(1,0,1,0,1,0,1,0)
B <- c(1,1,0,0,1,1,0,0)
C <- c(1,1,1,1,0,0,0,0)
Output <- c(8,2,0,2,2,0,2,4)
data <- data.frame(cbind(A,B,C,Output))
所以,这里发生的事情是,每当我重复A,B列序列时,我都会取这些行,并以百分比表示它们的输出

例如
A=NoFault
B=NoFault
,将C
Fault
NoFault
的输出转换为分数 如果可以避免循环,我希望使用向量运算或
plyr
package来执行此操作。

首先使用总计创建一个新列(或临时变量,如果您愿意)。然后用它来得到百分比

data$Total <- ave(Output, A, B, FUN=sum)
data$Percent <- data$Output/data$Total
data

##   A B C Output Total   Percent
## 1 1 1 1      8    10 0.8000000
## 2 0 1 1      2     2 1.0000000
## 3 1 0 1      0     2 0.0000000
## 4 0 0 1      2     6 0.3333333
## 5 1 1 0      2    10 0.2000000
## 6 0 1 0      0     2 0.0000000
## 7 1 0 0      2     2 1.0000000
## 8 0 0 0      4     6 0.6666667

data$Total请将
dput(yourdataframe)
的输出复制到问题中。还有,你试过什么?我不明白C的作用,你能在几行上再说明一下吗?请告诉我们你已经写了什么代码。我们在这里是为了帮助纠正损坏的代码,而不是为您编写代码。谢谢。所以,就像每当A&B是一些值(Fault/NoFault)时,C作为Fault或NoFault的概率是多少。因此,第1行和第5行构成一种情况。同样,第2行和第6行作为第二种情况。
data$Total <- ave(Output, A, B, FUN=sum)
data$Percent <- data$Output/data$Total
data

##   A B C Output Total   Percent
## 1 1 1 1      8    10 0.8000000
## 2 0 1 1      2     2 1.0000000
## 3 1 0 1      0     2 0.0000000
## 4 0 0 1      2     6 0.3333333
## 5 1 1 0      2    10 0.2000000
## 6 0 1 0      0     2 0.0000000
## 7 1 0 0      2     2 1.0000000
## 8 0 0 0      4     6 0.6666667