Существует ли функция R для сравнения значения одного столбца со всеми значениями другого столбца? - PullRequest
0 голосов
/ 09 января 2020

Я работаю с двумя различными большими наборами данных и пытаюсь использовать mapply (), чтобы заставить работать итеративные функции.

Цель состоит в том, чтобы взять каждый столбец точек данных из столбца 'a' и сравните его со всеми точками данных в столбце «b». Если один элемент из «a» больше, чем какой-либо элемент из «b», тогда столбец «сравнения» будет «ДА». df <-data.frame ('a' = c (10,15,8), 'b' = c (22,11,9)) </p>

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

Ответы [ 3 ]

0 голосов
/ 09 января 2020

Вы можете сделать

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

Или

df$compar <- ifelse(df$a > df$b, "yes", "no")
0 голосов
/ 09 января 2020

вот рабочий пример вашего исходного поста.

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
0 голосов
/ 09 января 2020
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'))
...