簡體   English   中英

R:將多個字符串更改為另一個字符串

[英]R: Change multiple strings to one other string

相對 R 新手在這里。 如何將字符向量中的多個字符串更改為一個字符串?

例如:

college <- c("CAS", "HHS", "CB", "CAS,HHS", "CB", "CAS,CB", "CAS,HHS,CB", "HHS")

我想保留“CAS”、“HHS”和“CB”,並將其他所有內容更改為“MULT”。 我試過了:

dontchange <- c("CAS", "HHS", "CB")
college[college!=dontchange] <- c("MULT")
college
[1] "CAS"  "HHS"  "CB"   "MULT" "MULT" "MULT" "MULT" "HHS" 

第五個元素(第二個“MULT”)應該是 CB。

任何幫助,將不勝感激。 謝謝!

我認為@akrun已經對!=%in%進行了詳細解釋。

這里有一些可能有幫助的選項

replace(college, !college %in% dontchange, "MULT")

要么

replace(college, is.na(match(college, dontchange)), "MULT")

而不是!= ,使用%in%! . ==!=這樣的元素比較運算符在進行比較時回收第二個向量以使長度相同,即 'dontchange' 中的元素從頭開始回收,直到它到達第一個字符串的末尾

college[!college %in% dontchange] <- "MULT"

college != dontchange
#[1] FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE FALSE

警告信息:In college:= dontchange : longer object length is not multiple of shorter object length

它類似於復制 dontchange 向量

rep(dontchange, length.out = length(college))
#[1] "CAS" "HHS" "CB"  "CAS" "HHS" "CB"  "CAS" "HHS"

請注意這些值是如何回收的。 這些是針對較長向量“學院”的每個元素進行比較的

college != rep(dontchange, length.out = length(college))
#[1] FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE FALSE

因此,當我們分配時,它會將“學院”中的那些 TRUE 元素分配給“MULT”,這是不正確的。 相反,它會是

!college %in% dontchange
#[1] FALSE FALSE FALSE  TRUE FALSE  TRUE  TRUE FALSE

另一個選項也是來自fct_collapseforcats

library(forcats)
fct_collapse(college, MULT = setdiff(college, dontchange))

暫無
暫無

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

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