假设我有一个包含多个字符串的向量:
// Common function to get first day for any month & year.
public DateTime GetFirstDayOfMonth(int year, int month, int day)
{
return new DateTime(year, month, 1)
.AddDays((7 - datetime.DayOfWeek.GetHashCode() + day) % 7);
}
public DateTime GetFirstMonday(int year, int month = 1)
{
return GetFirstDayOfMonth(year, month, DayOfWeek.Monday.GetHashCode());
}
如何替换第一个“?” b用第二个“?”用c和第三个“?”通过d,以产生如下结果:
a<- c('a?cd','ab?cd','abc?')
用G. Grothendieck的答案改善话题!
如果同一元素中有两个符号应替换为不同的模式:
'abcd','abcd','abcd'
答案 0 :(得分:3)
如下所示,在每个组件上应用chartr
。请注意,head(...)
是c("b", "c", "d")
。不使用任何软件包。
a<- c('a?cd','ab?cd','abc?') # test input
mapply(chartr, "?", head(letters[-1], length(a)), a, USE.NAMES = FALSE)
## [1] "abcd" "abccd" "abcd"
如果您要检查的是每个组件中是否缺少“ a”,“ b”,“ c”,“ d”元素,请替换?缺少该元素的元素,然后首先创建L个替换的列表,然后将sub
应用于每个带有它的组件。我们假设每个组件中有0或1个缺少的元素,以及?的0或1个实例。在每个组件中。同样,不使用任何软件包。
L <- lapply(strsplit(a, ""), setdiff, x = letters[1:4])
L[lengths(L) == 0] <- ""
mapply(`sub`, "[?]", L, a, USE.NAMES = FALSE)
## [1] "abcd" "abcd" "abcd"
答案 1 :(得分:2)
stringr::str_replace()
具有矢量替换,因此您可以执行以下操作:
library(stringr)
str_replace(a, "\\?", letters[seq_along(a) + 1])
[1] "abcd" "abccd" "abcd"
答案 2 :(得分:1)
您可以使用str_replace
软件包中的stringr
library(stringr)
a<- c('a?cd','ab?cd','abc?')
str_replace(a,"[?]",letters[2:4])
[1] "abcd" "abccd" "abcd"
或
str_replace(a, "[?]", c("b", "c", "d"))
[1] "abcd" "abccd" "abcd"