8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

`%in%` 和 `==` 有什么区别?

void void 1月前

15 0

df <- structure(list(x = 1:10, time = c(0.5, 0.5, 1, 2, 3, 0.5, 0.5, 1, 2, 3)), .Names = c(\'x\', \'time\'), row.names = c(NA, -10L), class = \'data.frame\') df[df$time %in% c(0.5, 3), ]## x ti...

df <- structure(list(x = 1:10, time = c(0.5, 0.5, 1, 2, 3, 0.5, 0.5, 
1, 2, 3)), .Names = c("x", "time"), row.names = c(NA, -10L), class = "data.frame")


df[df$time %in% c(0.5, 3), ]
##     x time
## 1   1  0.5
## 2   2  0.5
## 5   5  3.0
## 6   6  0.5
## 7   7  0.5
## 10 10  3.0

df[df$time == c(0.5, 3), ]
##     x time
## 1   1  0.5
## 7   7  0.5
## 10 10  3.0

%in% 什么区别 ==

帖子版权声明 1、本帖标题:`%in%` 和 `==` 有什么区别?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由void void在本站《dataframe》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 问题在于向量回收。

    第一行完全符合您的预期。它检查 df$time c(0.5, 3) 并返回 中的值。

    你的第二行比较棘手。它实际上相当于

    df[df$time == rep(c(0.5,3), length.out=nrow(df)),]
    

    为了理解这一点,让我们看看如果使用向量会发生什么 rep(0.5, 10)

    rep(0.5, 10) == c(0.5, 3)
    [1]  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE
    

    看看它如何返回每个奇数值。本质上它将 0.5 与向量匹配 c(0.5, 3, 0.5, 3, 0.5...)

    您可以通过这种方式操纵向量以产生不匹配。以向量为例 rep(c(3, 0.5), 5)

    rep(c(3, 0.5), 5) == c(0.5, 3)
    [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    

    它们都是 FALSE ;您将每个 0.5 与 3 匹配,反之亦然。

  • 得到它总是使用 %in%,除非我正在比较一个唯一值或实际上打算使用回收,非常清楚谢谢 +

  • @user1320502 实际上,即使只有一个值,使用 %in% 也有一些优势。尝试 x <- c(1:5, rep(NA, 3)); x[x==3] 并将其与 x[x%in%3] 进行比较。

  • Kip 1月前 0 只看Ta
    引用 5

    df$time == c(0.5,3)
    

    c(0.5,3) 一个被广播到 的形状 df$time ,即 c(0.5,3,0.5,3,0.5,3,0.5,3,0.5,3) 。然后逐个元素地比较这两个向量。

    另一方面,

    df$time %in% c(0.5,3)
    

    检查每个元素是否 df$time 属于集合 {0.5, 3} .

  • 这是一个老话题,但我还没有在任何地方看到过这个答案,它可能与某些人有关。

    两者之间的另一个区别是对 NA(缺失值)的处理。

    NA == NA
    [1] NA
    NA %in% c(NA)
    [1] TRUE
    
返回
作者最近主题: