"multiply" 字符串中单个字符的 R 函数吗?
Is the an R function to "multiply" individual characters in a string?
string1 <- c("AB", "CD", "EF")
string2 <- c("E", "GH)
string1 string2 output
AB E AE, BE
CD GH CG, CH, DG, DH
EF E, F
对于第 1 行,它可以是 A 和 B,但绝不能是 A 和 B 与 E。
这是我目前拥有的:
唯一(strsplit(x,“”))
[[1]]
[1] "A" "B"
[[2]]
[1] "E"
我也知道我必须使用 combn() 函数,但我不确定如何使用。
用""
分割两个字符串后,用Map
循环相应的元素,用outer
创建一个matrix
的组合,同时指定FUN
作为 paste
连接单个元素,unlist
list
在 paste
将字符串向量转换为单个字符串 (toString
) 后输出并创建一个 data.frame,其中字符串和输出为列
output <- unlist(Map(function(x, y) toString(sort(c(outer(x,
if(length(y) == 0) "" else y, FUN = paste0)))),
strsplit(string1, ""), strsplit(string2, "")))
data.frame(string1, string2, output)
# string1 string2 output
#1 AB E AE, BE
#2 CD GH CG, CH, DG, DH
#3 EF E, F
注意:if
确保如果字符串只有空白 (""
) 元素,它不会 return character(0)
如果超过2个字符串,使用expand.grid
library(dplyr)
library(purrr)
output <- mget(ls(pattern = "^string\d+$")) %>%
transpose %>%
map_chr(~ {
x1 <- strsplit(unlist(.), "")
x1[lengths(x1) == 0] <- ''
expand.grid(x1) %>%
invoke(paste0, .) %>%
toString
} )
mget(ls(pattern = "^string\d+$")) %>%
as_tibble %>%
mutate(output = output)
-输出
# A tibble: 3 x 4
# string1 string2 string3 output
# <chr> <chr> <chr> <chr>
#1 AB "E" FH AEF, BEF, AEH, BEH
#2 CD "GH" NG CGN, DGN, CHN, DHN, CGG, DGG, CHG, DHG
#3 EF "" C EC, FC
数据
string1 <- c("AB", "CD", "EF")
string2 <- c("E", "GH", "")
string3 <- c("FH", "NG", "C")
string1 <- c("AB", "CD", "EF")
string2 <- c("E", "GH)
string1 string2 output
AB E AE, BE
CD GH CG, CH, DG, DH
EF E, F
对于第 1 行,它可以是 A 和 B,但绝不能是 A 和 B 与 E。
这是我目前拥有的:
唯一(strsplit(x,“”))
[[1]]
[1] "A" "B"
[[2]]
[1] "E"
我也知道我必须使用 combn() 函数,但我不确定如何使用。
用""
分割两个字符串后,用Map
循环相应的元素,用outer
创建一个matrix
的组合,同时指定FUN
作为 paste
连接单个元素,unlist
list
在 paste
将字符串向量转换为单个字符串 (toString
) 后输出并创建一个 data.frame,其中字符串和输出为列
output <- unlist(Map(function(x, y) toString(sort(c(outer(x,
if(length(y) == 0) "" else y, FUN = paste0)))),
strsplit(string1, ""), strsplit(string2, "")))
data.frame(string1, string2, output)
# string1 string2 output
#1 AB E AE, BE
#2 CD GH CG, CH, DG, DH
#3 EF E, F
注意:if
确保如果字符串只有空白 (""
) 元素,它不会 return character(0)
如果超过2个字符串,使用expand.grid
library(dplyr)
library(purrr)
output <- mget(ls(pattern = "^string\d+$")) %>%
transpose %>%
map_chr(~ {
x1 <- strsplit(unlist(.), "")
x1[lengths(x1) == 0] <- ''
expand.grid(x1) %>%
invoke(paste0, .) %>%
toString
} )
mget(ls(pattern = "^string\d+$")) %>%
as_tibble %>%
mutate(output = output)
-输出
# A tibble: 3 x 4
# string1 string2 string3 output
# <chr> <chr> <chr> <chr>
#1 AB "E" FH AEF, BEF, AEH, BEH
#2 CD "GH" NG CGN, DGN, CHN, DHN, CGG, DGG, CHG, DHG
#3 EF "" C EC, FC
数据
string1 <- c("AB", "CD", "EF")
string2 <- c("E", "GH", "")
string3 <- c("FH", "NG", "C")