gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 09:11:05 26 4
gpt4 key购买 nike

我正在尝试在数据框中查找某些值的所有实例,并将它们替换为 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com