簡體   English   中英

R:為grepl粘貼數據框列

[英]R: Paste a dataframe column for grepl

我在R中有兩行代碼,理論上應該做同樣的事情,我想使用它們在列中設置值

a <- paste(ref.dg.safe[,'safewords'], collapse="|")
"c(\"NO BATTERIES\", \"COSTUME\", \"CABLE\", \"BAG\", \"CLOTHING\)"

b <- paste(ref.dg.safe$safewords, collapse="|")  
NO BATTERIES|COSTUME|CABLE|BAG|CLOTHING|

我想要第二行輸出使用第一行代碼,因為在函數中使用“ b”時出現部分匹配錯誤

我也想了解為什么輸出如此不同

更新:

最初我使用該行導入了數據集

ref.dg.safe <- unique(tbl_df(read.csv("~/Projects/foo_project/REF_SafeList.txt", sep = "\t", as.is = TRUE, strip.white=TRUE)))

dput看起來像

structure(list(safewords = c("NO BATTERIES", "COSTUME", "CABLE", 
"BAG", "CLOTHING", "BRACELET", "FAUCET", "IRON", "CASE", "NO BATTERY", 
"BELT", "JACKET", "CONVERTER", "HAIR", "GLASS", "SHOE", "ROUTER", 
"LABEL", "ADAPTOR", "SILICONE", "EARPHONE", "SPONGE", "WOOD", 
"TANKTOP", "WALLET", "TUBE", "TRIPODS", "STONE", "LAMP", "HEADPHONES", 
"COOKIECUTTERS", "CONVERTERS", "COWLEATHER", "INFLATABLETOY", 
"HEADPHONE", "LABLE", "ROMPER", "POLE", "PROBE", "FIBEROPTIC", 
"APRON", "TABLECLOTH", "AVR", "TABLEBASE", "DESK", "BEAUTYGOODS", 
"SEAT", "NOBATTERIES", "SHEOS", "CHARGERS", "STAPLER", "SATCHEL"
)), .Names = "safewords", class = c("tbl_df", "data.frame"), row.names  =     c(NA, 
-52L))

回答原因:

> class(df[,"safewords"])
[1] "tbl_df"     "data.frame"
> class(df$safewords)
[1] "character"

這是由於[$運算符的工作方式以及它們如何強制返回而造成的(我不知道如何總結這一點,請參閱有關data.frame和subset運算符的文檔)。

一個解決辦法是使第一種形式松散它與data.frame狀態unlist是這樣的:

> paste(unlist(df[,"safewords"]),collapse="|")
[1] "NO BATTERIES|COSTUME|CABLE|BAG|CLOTHING|BRACELET[...]"

我刪除了部分輸出以使其在此處可讀

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM