添加一列显示前两列是否包含 0

Add a column that shows whether the two previous columns include 0 or not

我有一个叫 dat 的 data.frame。我想向其中添加一个名为 dif 的新列。然后,在每一行中,如果 lowerupper 范围包含 0(例如,第一行中的 -0.410.1)我想要dif 值显示 FALSE 其他(例如,0.100.2 第二行)TRUE.

对于任何类似的 data.frame 是否可以在 R 中执行此操作(以下是一个玩具示例,感谢您提供功能性答案)?

dat <- data.frame(lower = c(-0.41, .1, -.2), upper = 1:3*.1, row.names = paste("a", 1:3)) # add a column called `dif`


desired_output <- data.frame(lower = c(-0.41, .1, -.2), upper = 1:3*.1, dif = c(F,T,F), row.names = paste("a", 1:3))

您可以使用 dplyr::between:

library(dplyr)

dat %>% 
  rowwise() %>% 
  mutate(dif = !between(0, lower, upper))

输出

# A tibble: 3 x 3
# Rowwise: 
  lower upper dif  
  <dbl> <dbl> <lgl>
1 -0.41   0.1 FALSE
2  0.1    0.2 TRUE 
3 -0.2    0.3 FALSE

您可以使用:

transform(dat, dif = lower > 0 | upper < 0)

#  lower upper   dif
#1 -0.41   0.1 FALSE
#2  0.10   0.2  TRUE
#3 -0.20   0.3 FALSE

我们可以使用 mutatedplyr

library(dplyr)
mutate(dat, dif = lower > 0 | upper < 0)

base R

中的一个选项
Reduce(`|`, Map(function(x, y)  match.fun(y)(x, 0), dat, c(">", "<")))
#[1] FALSE  TRUE FALSE

这是另一个基础 R 选项,使用 do.call*

dat$dif <- do.call("*", dat) > 0

这样

> dat
    lower upper   dif
a 1 -0.41   0.1 FALSE
a 2  0.10   0.2  TRUE
a 3 -0.20   0.3 FALSE