【问题标题】:Create a function in R to compare rows在 R 中创建一个函数来比较行
【发布时间】:2020-03-28 20:08:41
【问题描述】:

我想在 R 中创建一个函数来比较“当前行值”和“前一行值”。 一个。如果当前行值低于前一行值,则返回字 LOW 湾。如果当前行值高于上一个值,则返回单词 HIGH C。如果当前行值与前一行值相同,则返回单词 EQUAL

我想创建一个名为 Decision 的新 COLUMN,其中的单词将如下所示进行存储

价值决策

1 不适用

2 高

1.5 低

1.4 低

1.4 等于

【问题讨论】:

    标签: r


    【解决方案1】:

    我们可以使用case_when 将'Value' 与之前的'Value' (lag) 进行比较,并根据它是更低还是更高来创建'Decision' 列

    library(dplyr)
    df1 %>%
     mutate(Decision = case_when(Value < lag(Value) ~ "LOW", 
         Value > lag(Value) ~ "HIGH", Value == lag(Value) ~ "EQUAL"))
    #  Value Decision
    #1   1.0     <NA>
    #2   2.0     HIGH
    #3   1.5      LOW
    #4   1.4      LOW
    #5   1.4    EQUAL
    

    或者另一种选择是获取差异然后更改factor中的labels

    with(df1, c(NA_character_, 
        as.character(factor(sign(Value[-length(Value)] - Value[-1]),         
           levels = c(-1, 1, 0), labels = c("HIGH", "LOW", "EQUAL")))))
    #[1] NA      "HIGH"  "LOW"   "LOW"   "EQUAL"
    

    或者使用for 循环

    df1$Decision <- rep(NA_character_, nrow(df1))
    for(i in 2: nrow(df1)){
        if(df1$Value[i] > df1$Value[i-1]){
           df1$Decision[i] <- "HIGH"
          } else if(df1$Value[i] < df1$Value[i-1]) {
    
            df1$Decision[i] <- "LOW"
           } else df1$Decision[i] <- "EQUAL"
    
    
       }
    

    如果需要是函数

    f1 <- function(dat, colNm, newCol) {
      dat[[newCol]] <- rep(NA_character_, nrow(dat))
        for(i in 2: nrow(dat)){
            if(dat[[colNm]][i] > dat[[colNm]][i-1]){
               dat[[newCol]][i] <- "HIGH"
              } else if(dat[[colNm]][i] < dat[[colNm]][i-1]) {
    
                dat[[newCol]][i] <- "LOW"
               } else dat[[newCol]][i] <- "EQUAL"
    
    
           }
         dat
       }
    
    f1(df1, "Value", "Decision")
    

    数据

    df1 <- structure(list(Value = c(1, 2, 1.5, 1.4, 1.4)), class = "data.frame",
         row.names = c(NA, 
    -5L))
    

    【讨论】:

    • 我们可以在 for 循环中使用 if else 循环来达到相同的结果吗?
    • @prog101 是的,可以实现
    • 我们如何制作整个循环的函数并将参数提供给新函数?
    猜你喜欢
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 2020-07-09
    • 2021-05-30
    • 1970-01-01
    • 2018-08-12
    相关资源
    最近更新 更多