当我比较 中的列时,为什么要使用|vs ?any()dplyr::mutate()
为什么他们返回不同的答案?
例如:
library(tidyverse)
df <- data_frame(x = rep(c(T,F,T), 4), y = rep(c(T,F,T, F), 3), allF = F, allT = T)
df %>%
mutate(
withpipe = x | y # returns expected results by row
, usingany = any(c(x,y)) # returns TRUE for every row
)
Run Code Online (Sandbox Code Playgroud)
这里发生了什么,为什么我应该使用一种方法来比较另一种值?
两者的区别在于答案的计算方式:
|,元素按行比较,布尔逻辑用于返回正确的值。在上面的示例中,每个 x 和 y 对相互进行比较,并为每对返回一个逻辑值,从而产生 12 个不同的答案,数据帧的每一行一个。any(),另一方面,查看整个向量并返回单个值。在上面的例子中,计算新usingany列的 mutate 行基本上是这样做的:any(c(df$x, df$y)),它将返回,TRUE因为TRUE在df$x或中至少有一个值df$y。然后将该单个值分配给数据帧的每一行。您可以使用数据框中的其他列看到这一点:
df %>%
mutate(
usingany = any(c(x,y)) # returns all TRUE
, allfany = any(allF) # returns all FALSE because every value in df$allF is FALSE
)
Run Code Online (Sandbox Code Playgroud)
回答何时应该使用 which:|当您想按行比较元素时使用。any()当您想要关于整个数据框的通用答案时使用。
TLDR,在使用时dplyr::mutate(),您通常会想要使用|.
| 归档时间: |
|
| 查看次数: |
2528 次 |
| 最近记录: |