添加一列显示前两列是否包含 0
Add a column that shows whether the two previous columns include 0 or not
我有一个叫 dat
的 data.frame。我想向其中添加一个名为 dif
的新列。然后,在每一行中,如果 lower
和 upper
范围包含 0(例如,第一行中的 -0.41
到 0.1
)我想要dif
值显示 FALSE
其他(例如,0.10
到 0.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
我们可以使用 mutate
从 dplyr
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
我有一个叫 dat
的 data.frame。我想向其中添加一个名为 dif
的新列。然后,在每一行中,如果 lower
和 upper
范围包含 0(例如,第一行中的 -0.41
到 0.1
)我想要dif
值显示 FALSE
其他(例如,0.10
到 0.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
我们可以使用 mutate
从 dplyr
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