【问题标题】:Is there an R function to compare between 1 column value with all values of another column?是否有一个 R 函数可以将一列值与另一列的所有值进行比较?
【发布时间】:2020-04-26 20:43:55
【问题描述】:

我正在处理两个不同的大型数据集并尝试使用 mapply() 来使迭代函数正常工作。

目标是从“a”列中逐列获取每个数据点,并将其与“b”列中的所有数据点进行比较。如果“a”中的一个元素大于“b”中的任何元素,则“比较”列为“是”。 df

and I want the output to be something like this:

   a  b compar
1 10 22    yes
2 15 11    yes
3  8  9     no

【问题讨论】:

  • df$compar <- c('no', 'yes')[(df$col1 > df$col2) + 1]
  • 我收到此错误:$<-.data.frame(*tmp*, compar, value = character(0)) 中的错误:替换有 0 行,数据有 3

标签: r time time-series comparison multiple-columns


【解决方案1】:
library(dplyr)
library(lubridate)

df=data.frame(
   col1=c('2001-06-30 01:00:00','2001-07-01 01:00:00','2000-07-01 01:00:00'),
   col2=c('2000-08-01 01:00:00','2003-07-01 01:00:00','2004-06-30 01:00:00')
)

df <- df %>%
 #format dates
 mutate_at(c('col1','col2'), ~ymd_hms(.)) %>%
 #add the new column
 mutate(compar = case_when(col1 > col2 ~ 'yes', TRUE ~ 'no'))

【讨论】:

    【解决方案2】:

    你可以的

    df$compar <- c('no', 'yes')[(df$a > df$b) + 1]
    

    或者

    df$compar <- ifelse(df$a > df$b, "yes", "no")
    

    【讨论】:

      【解决方案3】:

      这是您原始帖子的工作示例。

      col1 <- c(as.Date("2001-06-30 01:00:00 UTC"),as.Date("2001-07-01 01:00:00 UTC"),as.Date("2000-07-01 01:00:00 UTC"))
      col2 <- c(as.Date("2000-08-01 01:00:00 UTC"),as.Date("2003-07-01 01:00:00 UTC"),as.Date("2004-06-30 01:00:00 UTC"))
      df <- data.frame(col1, col2)
      df
      
      check <- function(elem, datafr){
      
        if (TRUE %in% (elem > datafr$col2)) {
          return (TRUE)
        }
        else {
          return (FALSE)
        }
      }
      
      addCol3 <- function(vector, dframe) {
        vr <- c() ### an empty vector 
      
        for (i in 1:length(vector)) { 
          vr[i] <- check(vector[i], dframe)
        }
        return (vr)
      }
      
      df$col3 <- addCol3(df$col1, df)
      df
      

      【讨论】:

        猜你喜欢
        • 2019-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-23
        相关资源
        最近更新 更多