R 使用 | 在数据框中查找值运算符 vs %in%

标签 r

我正在尝试在数据框中查找某些值的所有实例,并将它们替换为 NA。我尝试了这两种我认为等效的不同方式,但得到了不同的结果。例如:

df <- data.frame(a=c(1,2),b=c(3,4))
df[df == 1 | df == 4] <- NA

给了我预期的结果:
df
#    a  b
# 1 NA  3
# 2  2 NA

然而
df <- data.frame(a=c(1,2),b=c(3,4))
df[df %in% c(1,4)] <- NA

什么也没做:
df
#    a b
# 1  1 3
# 2  2 4

这似乎是因为如果我使用“|”运算符,它会逐个元素搜索数据框元素,而如果我使用 %in%,它会逐个向量(逐列)搜索数据框向量,但我不明白为什么。
df <- data.frame(a=c(1,2),b=c(3,4))
df == 1 | df == 4
#         a     b
# [1,]  TRUE FALSE
# [2,] FALSE  TRUE

df %in% c(1,4)
# [1] FALSE FALSE

最佳答案

如果我们查看 %in% 的代码

function (x, table) 
 match(x, table, nomatch = 0L) > 0L

所以,它基本上是在做一个 match . match的输出将是
match(c(1,4), df, nomatch = 0L) > 0L
#[1] FALSE FALSE
%in%适用于 vector s 而不是 data.frame .因此,我们使用 lapply 遍历列,然后执行 %in%
lapply(df, `%in%`, c(1, 4))

如果我们需要如何matrix ,然后使用 sapply
df[sapply(df, `%in%`, c(1, 4))] <- NA

我们可以查看 matchvector 上工作
sapply(df, match, x = c(1,4), nomatch = 0L) > 0
#         a     b
#[1,]  TRUE FALSE
#[2,] FALSE  TRUE

关于R 使用 | 在数据框中查找值运算符 vs %in%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47538001/

相关文章:

r - 如何在不求助于循环的情况下生成以下序列?

r - PlotCirc 中的标签旋转(DescTools 包)

r - 在 knitr 文档中嵌入 Shiny 应用程序

r - R中第三维的均值

r - 向 splitLayout 提供列表输入

r - 使用 ggplot2 组合 Boxplot 和 Histogram

r - 如何在更改 R 中一个变量的值时复制数据框中的行?

r - 使用 Elements 找到 Xpath,但无法通过 rvest 读取/抓取

r - 在图中绘制多个 geom-vline

r - 如何在拼凑而成的图形中调整带有plot_annotation标签的字体样式?