[英]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_collapse
的forcats
library(forcats)
fct_collapse(college, MULT = setdiff(college, dontchange))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.