在没有循环的情况下对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
,将CFault
和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