【问题标题】:Count Based on Value of Another Column in R根据 R 中另一列的值进行计数
【发布时间】:2019-12-04 15:26:00
【问题描述】:

我正在尝试在我的数据框中创建一个新列(称为 Error_1_Count),用于计算“错误类型 1”出现在名为“错误”的列中的每个不同“名称”值的次数。下面是我想要的结果数据框的一个示例。

我尝试根据错误创建一个带有分配的循环(见下文),但是,我的输出中的计数不正确(仅导致 0 和 1)。

请让我知道如何改进我的代码并确保计数仅针对“名称”的新值进行重置。谢谢!

Goal Result in Table


Name       Error         Error_1_Count
A       Error Type 1          1
A       Error Type 4          1
A       Error Type 1          2
B       Error Type 2          0
A       Error Type 1          3
C       Error Type 3          0
D       Error Type 1          1


names <- unique(data.df$name)
count <- 0

for (i in names) {

  data.df[data.df$name == i, data.df$error_1_count <- ifelse(data.df$error == 'Error Type 1', count + 1, count)]

}


#View(data.df)
#print(unique(data.df$error_1_count))


【问题讨论】:

    标签: r


    【解决方案1】:

    您可以使用avecumsum

    x$Error_1_Count <- ave(x$Error == "Error Type 1", x$Name, FUN=cumsum)
    x
    #  Name        Error Error_1_Count
    #1    A Error Type 1             1
    #2    A Error Type 4             1
    #3    A Error Type 1             2
    #4    B Error Type 2             0
    #5    A Error Type 1             3
    #6    C Error Type 3             0
    #7    D Error Type 1             1
    

    数据:

    x <- structure(list(Name = structure(c(1L, 1L, 1L, 2L, 1L, 3L, 4L), .Label = c("A", 
    "B", "C", "D"), class = "factor"), Error = structure(c(1L, 4L, 
    1L, 2L, 1L, 3L, 1L), .Label = c("Error Type 1", "Error Type 2", 
    "Error Type 3", "Error Type 4"), class = "factor")), row.names = c(NA, 
    -7L), class = "data.frame")
    

    【讨论】:

    • 这是一种干净简单的方法,效果很好——谢谢!
    【解决方案2】:

    dplyr类似的想法

    library(dplyr)
    df1 %>%
         group_by(Name) %>%
         mutate(Error = cumsum(Error == "Error Type 1"))
    

    数据

    df1 <- structure(list(Name = c("A", "A", "A", "B", "A", "C", "D"), Error = c("Error Type 1", 
    "Error Type 4", "Error Type 1", "Error Type 2", "Error Type 1", 
    "Error Type 3", "Error Type 1")), row.names = c(NA, -7L), class = "data.frame")
    

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 1970-01-01
      • 2021-11-16
      • 2020-08-04
      • 1970-01-01
      • 1970-01-01
      • 2022-07-01
      • 2021-11-07
      • 1970-01-01
      相关资源
      最近更新 更多