第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在dplyr中的字符串列上過濾多個值

在dplyr中的字符串列上過濾多個值

翻翻過去那場雪 2019-09-20 17:25:16
我data.frame在其中一列中有一個字符數(shù)據(jù)。我想data.frame在同一列中過濾多個選項。有沒有一種簡單的方法可以做到這一點,我錯過了?示例: data.frame name =datdays      name88        Lynn11          Tom2           Chris5           Lisa22        Kyla1          Tom222      Lynn2         Lynn我想過濾一下Tom,Lynn例如。當(dāng)我做:target <- c("Tom", "Lynn")filt <- filter(dat, name == target)我收到此錯誤:longer object length is not a multiple of shorter object length
查看完整描述

3 回答

?
波斯汪

TA貢獻1811條經(jīng)驗 獲得超4個贊

你需要%in%而不是==:


library(dplyr)

target <- c("Tom", "Lynn")

filter(dat, name %in% target)  # equivalently, dat %>% filter(name %in% target)

產(chǎn)生


  days name

1   88 Lynn

2   11  Tom

3    1  Tom

4  222 Lynn

5    2 Lynn

要了解原因,請考慮這里發(fā)生的事情:


dat$name == target

# [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE

基本上,我們將兩個長度target向量回收四次以匹配長度dat$name。換句話說,我們正在做:


 Lynn == Tom

  Tom == Lynn

Chris == Tom

 Lisa == Lynn

 ... continue repeating Tom and Lynn until end of data frame

在這種情況下,我們不會收到錯誤,因為我懷疑您的數(shù)據(jù)框?qū)嶋H上有不同數(shù)量的行不允許回收,但您提供的示例(8行)。如果樣本有一個奇數(shù)行,我會得到與你相同的錯誤。但即使回收工作,這顯然不是你想要的?;旧?,該陳述dat$name == target相當(dāng)于說:


返回TRUE等于“Tom”的每個奇數(shù)值或等于“Lynn”的每個偶數(shù)值。


碰巧的是,樣本數(shù)據(jù)框中的最后一個值是偶數(shù)并且等于“Lynn”,因此TRUE上面的那個值。


相比之下,dat$name %in% target說:


對于每個值dat$name,檢查它是否存在于target。


非常不一樣。結(jié)果如下:


[1]  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE

注意你的問題與之無關(guān)dplyr,只是誤用了==。


查看完整回答
反對 回復(fù) 2019-09-20
?
元芳怎么了

TA貢獻1798條經(jīng)驗 獲得超7個贊

使用base包:


df <- data.frame(days = c(88, 11, 2, 5, 22, 1, 222, 2), name = c("Lynn", "Tom", "Chris", "Lisa", "Kyla", "Tom", "Lynn", "Lynn"))


# Three lines

target <- c("Tom", "Lynn")

index <- df$name %in% target

df[index, ]


# One line

df[df$name %in% c("Tom", "Lynn"), ] 

輸出:


  days name

1   88 Lynn

2   11  Tom

6    1  Tom

7  222 Lynn

8    2 Lynn

使用sqldf:


library(sqldf)

# Two alternatives:

sqldf('SELECT *

      FROM df 

      WHERE name = "Tom" OR name = "Lynn"')

sqldf('SELECT *

      FROM df 

      WHERE name IN ("Tom", "Lynn")')


查看完整回答
反對 回復(fù) 2019-09-20
  • 3 回答
  • 0 關(guān)注
  • 831 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號