![](/img/trans.png)
[英]How can I bind a column of different row length to a dataframe and copy the same values according to a matching date/variable in R?
[英]Matching character values and changing an according value in a different column in R
我正在嘗試將字符向values[1:73]
與數據框中的一列進行匹配,以對同一數據框 (1,258 x 74) 中的完全不同的列進行更改。
假設向量是
[1] "AA1" "BB1"
[3] "AA2" "BB2"
數據框是
Instrument Holder
<chr> <chr>
1 CB AA1
2 CH BB2
3 CH XX
4 CB YY
5 CH BB2
現在我需要將向量與df$Holder
匹配,如果匹配,則將df$Instrument
CH 更改為 CB。
我嘗試過match()
和一些過濾,但最終得到了錯誤的輸出。
indx <- match(vector, df$Holder)
indx <- indx[!is.na(indx)]
for (i in seq_along(indx)) {
df$Instument[indx[i]] <- c("CB")
}
和
for (i in seq_along(vector)){
new <- df %>%
filter(Holder == vector[i]) %>%
mutate(Instrument = "CB")
}
期待你的想法!
謝謝
不太確定,但我認為這就是你想要的:
vector <- c("AA1", "BB1", "AA2", "BB2")
library(dplyr)
df <- tribble(
~Instrument, ~Holder,
"CB", "AA1",
"CH", "BB2",
"CH", "XX",
"CB", "YY",
"CH", "BB2"
)
df_new <- df %>%
mutate(test = stringi::stri_detect_regex(
df$Holder,
paste0(vector, collapse = "|")
)) %>%
mutate(Instrument = ifelse(test,
"CB",
Instrument))
df_new
#> # A tibble: 5 x 3
#> Instrument Holder test
#> <chr> <chr> <lgl>
#> 1 CB AA1 TRUE
#> 2 CB BB2 TRUE
#> 3 CH XX FALSE
#> 4 CB YY FALSE
#> 5 CB BB2 TRUE
為了您的利益,我創建了一個名為 test 的新專欄,以便更容易了解正在發生的事情。 每當test
為TRUE
,Instrument 列就會發生變化,否則保持不變。 paste0(vector, collapse = "|")
從向量中的不同模式生成單個正則表達式。 stringi::stri_detect_regex
與grepl
相同,即如果在字符串中找到模式則返回TRUE
。 (但如果你不想使用stringi
這里與grepl
mutate(test = grepl(paste0(vector, collapse = "|"), df$Holder))
。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.