如何将r中的多个变量与ifelse中的一个进行比较?

如何将r中的多个变量与ifelse中的一个进行比较?,r,R,我试图将许多变量与一个变量进行比较,即第1列到第5列中的标志值小于第6列。我可以做一个ifelsecoll1 lt coll6 | coll2 lt coll6 | coll3 lt coll6…等等。。。1,0但这太长了,因为我有数百列。此外,许多列都有NA,格式为POSIXct日期。有人知道吗 谢谢 想要: 我们可以将1:5列数据集与第6列数据集进行比较,使用行和创建逻辑向量,并将值替换为NA,其中行都是NA 我们可以将1:5列数据集与第6列数据集进行比较,使用行和创建逻辑向量,并将值替换为

我试图将许多变量与一个变量进行比较,即第1列到第5列中的标志值小于第6列。我可以做一个ifelsecoll1 lt coll6 | coll2 lt coll6 | coll3 lt coll6…等等。。。1,0但这太长了,因为我有数百列。此外,许多列都有NA,格式为POSIXct日期。有人知道吗

谢谢

想要:


我们可以将1:5列数据集与第6列数据集进行比较,使用行和创建逻辑向量,并将值替换为NA,其中行都是NA


我们可以将1:5列数据集与第6列数据集进行比较,使用行和创建逻辑向量,并将值替换为NA,其中行都是NA


这就是你想做的吗?使用dplyr


*请注意,我没有打印前两列,因为它们不适合我的控制台。

这就是您要做的吗?使用dplyr


*请注意,我没有打印前两列,因为它们不适合我的控制台。

这是一个很好的解决方案,但我认为它不适用于POSIXct值clarified@biostatguy12是否要将这些列从比较中排除?否,例如,我比较日期,我想看看col1-col5中的日期是否早于COL6;很抱歉我原以为一个数值解决方案会转移到我的数据中,我喜欢这个解决方案,因为它紧凑,可以扩展到n个变量,而不指定列名。这是一个很好的解决方案,但我认为它不适用于POSIXct值。抱歉,我应该这样做clarified@biostatguy12是否要将这些列从中排除比较?不,我正在比较日期,例如,我想看看col1-col5中的日期是否早于COL6;对不起,我以为一个数字解决方案会转移到我的数据中。我喜欢这个解决方案,因为它紧凑,可以扩展到n个变量,而无需指定列名。请更新您的示例df以更能代表您的实际情况。请在此提供您的数据。请更新您的样本df,使其更能代表您的实际情况。也许在这里提供dputheadyour_data_。我认为这是可行的,但我有数百列,所以键入col1 col 2会有点乏味。。。。。col 100我认为这是可行的,但我有数百列,所以键入col1 col 2会有点乏味。。。。。第100列
df<-data.frame(col1=c("2000-01-06", "2000-01-07", "2000-01-04", "2000-01-07", NA, "2000-01-03", NA),
               col2=c("2000-01-07", "2000-01-05", NA, NA, NA, NA,NA),
               col3=c("2000-01-09", "2000-01-05", NA, NA, NA, NA, NA),
               col4=c("2000-01-10", "2000-01-05", NA, "2000-01-07", "2000-01-08", NA, NA),
               col5=c("2000-01-08", "2000-01-05", NA, NA, NA, NA, NA),
               col6=c("2000-01-06", "2000-01-07", "2000-01-05", "2000-01-06", "2000-01-08", "2000-01-09", "2000-01-08"),
               want=c(0, 1, 1, 0,0, 1, NA))


        col1       col2       col3       col4       col5       col6 want
1 2000-01-06 2000-01-07 2000-01-09 2000-01-10 2000-01-08 2000-01-06    0
2 2000-01-07 2000-01-05 2000-01-05 2000-01-05 2000-01-05 2000-01-07    1
3 2000-01-04       <NA>       <NA>       <NA>       <NA> 2000-01-05    1
4 2000-01-07       <NA>       <NA> 2000-01-07       <NA> 2000-01-06    0
5       <NA>       <NA>       <NA> 2000-01-08       <NA> 2000-01-08    0
6 2000-01-03       <NA>       <NA>       <NA>       <NA> 2000-01-09    1
7       <NA>       <NA>       <NA>       <NA>       <NA> 2000-01-08   NA

i1 <- !rowSums(!is.na(df[1:5]))
df$want <- (rowSums(df[1:5] < df[,6], na.rm = TRUE) > 0) * (NA^i1)
df$want
#[1]  0  1  1  0  0  1 NA
df[1:6] <- lapply(df[1:6], as.Date)
df$want <- (rowSums(sapply(df[, 1:5], `<`, df[,6]), na.rm = TRUE) > 0) * (NA^i1)
df$want
#[1]  0  1  1  0  0  1 NA
library(dplyr)

df %>% 
  as_tibble() %>% 
  mutate_at(1:6, as.POSIXct) %>% 
  mutate(want = ifelse(pmin(col1, col2, col3, col4, col5, na.rm = T) < col6, 1L, 0L))

# A tibble: 7 x 5
  col3                col4                col5                col6                 want
  <dttm>              <dttm>              <dttm>              <dttm>              <int>
1 2000-01-09 00:00:00 2000-01-10 00:00:00 2000-01-08 00:00:00 2000-01-06 00:00:00     0
2 2000-01-05 00:00:00 2000-01-05 00:00:00 2000-01-05 00:00:00 2000-01-07 00:00:00     1
3 NA                  NA                  NA                  2000-01-05 00:00:00     1
4 NA                  2000-01-07 00:00:00 NA                  2000-01-06 00:00:00     0
5 NA                  2000-01-08 00:00:00 NA                  2000-01-08 00:00:00     0
6 NA                  NA                  NA                  2000-01-09 00:00:00     1
7 NA                  NA                  NA                  2000-01-08 00:00:00    NA