【问题标题】:Performing selective operation on R data frame without loop在没有循环的情况下对 R 数据帧执行选择性操作
【发布时间】:2013-08-30 20:28:20
【问题描述】:

我有这个数据框

|    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))

我希望执行一个操作来计算 C 列的输出百分比,结果应该如下所示:

|    A    |    B    |    C    | Output |
|---------|---------|---------|--------|
| NoFault | NoFault | NoFault |8/(8+2) |
|  Fault  | NoFault | NoFault |2/(2+0) |
| NoFault |  Fault  | NoFault |0/(0+2) |
|  Fault  |  Fault  | NoFault |2/(2+4) |
| NoFault | NoFault |  Fault  |2/(2+8) |
|  Fault  | NoFault |  Fault  |0/(0+2) |
| NoFault |  Fault  |  Fault  |2/(2+0) |
|  Fault  |  Fault  |  Fault  |4/(4+2) |

所以,这里发生的情况是,每当我重复 A、B 列序列时,我都会获取这些行并以百分比形式输出。

例如A = NoFaultB=NoFault,将C的输出FaultNoFault转换成分数 如果可以避免循环,我希望使用向量操作或plyr 包来执行此操作。

【问题讨论】:

  • 请将dput(yourdataframe) 的输出复制到问题中。另外,你试过什么?
  • 看不懂C的作用,能多说明几行吗?
  • 请告诉我们您已经编写了哪些代码。我们在这里帮助纠正损坏的代码,而不是为您编写。谢谢。
  • 因此,就像当 A 和 B 是一些值(故障/无故障)时,将 C 设为故障或无故障的机会有多大。因此,第 1 行和第 5 行构成一个案例。同样,第 2 行和第 6 行作为第二种情况。

标签: r plyr


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-12
    • 2013-02-16
    • 2016-07-13
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    相关资源
    最近更新 更多