R 拆分字符串,然后将其随机粘贴在一起

R 拆分字符串,然后将其随机粘贴在一起,r,string,vector,R,String,Vector,我有两个向量: presidents = c("Bill Clinton", "George Bush", "Ronald Reagan", "Jimmy Carter", "Gerald Ford") vice.presidents = vice.presidents = c("Al Gore", "Dan Quayle", "George Bush","Walter Mondale", "Nelson Rockefeller") 我正在尝试使用substr()的形式,即“克林顿+奎尔”,

我有两个向量:

presidents = c("Bill Clinton", "George Bush", "Ronald Reagan", "Jimmy Carter", "Gerald Ford")

vice.presidents = vice.presidents = c("Al Gore", "Dan Quayle", "George Bush","Walter Mondale", "Nelson Rockefeller")
我正在尝试使用
substr()
的形式,即“克林顿+奎尔”,“布什+…”和姓氏,并随机选择一位总统和一位随机选择的副总统配对,来获得结果

试试下面的方法

set.seed(1843)
p <- sapply(strsplit(presidents, " "), '[', 2)
vp <- sapply(strsplit(vice.presidents, " "), '[', 2)
n <- 5
paste(sample(p, n, TRUE), sample(vp, n, TRUE))
set.seed(1843)
p试试下面的方法

set.seed(1843)
p <- sapply(strsplit(presidents, " "), '[', 2)
vp <- sapply(strsplit(vice.presidents, " "), '[', 2)
n <- 5
paste(sample(p, n, TRUE), sample(vp, n, TRUE))
set.seed(1843)
p使用正则表达式的
stringr
包的解决方案
presidents=c(“比尔·克林顿”、“乔治·布什”、“罗纳德·里根”、“吉米·卡特”、“杰拉尔德·福特”)
副总统=c(“戈尔”、“丹·奎尔”、“乔治·布什”、“沃尔特·蒙代尔”、“纳尔逊·洛克菲勒”)
图书馆(stringr)
str_c(示例(str_extract(presidents,pattern=“\\b[:alpha:][]*\\b$”)),
样本(str_摘录(副总裁,pattern=“\\b[:alpha:][]*\\b$”),
sep=“+”)
#>[1]“布什+布什”、“里根+蒙代尔”、“福特+洛克菲勒”
#>[4]“卡特+戈尔”“克林顿+奎尔”
关于正则表达式
  • \\b
    是单词边界的限定符
  • [[:alpha:]
    是从A到z的一个字母
  • *
    与前一个字符零次或多次匹配
  • $
    分隔字符链的末尾
  • 然后
    \\b[:alpha:][\\b$
    匹配最后一个单词,这里是姓氏
tidyverse
它只是使用管道语法重写了前面的答案

库(stringr)
图书馆(purrr)
名单(总裁、副总裁)%>%
地图(样本)%>%
映射(str_extract,pattern=“\\b[:alpha:]+\\b$”%>%
调用(str_c,sep=“+”)
#>[1]“里根+奎尔”“克林顿+布什”“卡特+蒙代尔”
#>[4]“福特+戈尔”“布什+洛克菲勒”
使用正则表达式的
stringr
包的解决方案
presidents=c(“比尔·克林顿”、“乔治·布什”、“罗纳德·里根”、“吉米·卡特”、“杰拉尔德·福特”)
副总统=c(“戈尔”、“丹·奎尔”、“乔治·布什”、“沃尔特·蒙代尔”、“纳尔逊·洛克菲勒”)
图书馆(stringr)
str_c(示例(str_extract(presidents,pattern=“\\b[:alpha:][]*\\b$”)),
样本(str_摘录(副总裁,pattern=“\\b[:alpha:][]*\\b$”),
sep=“+”)
#>[1]“布什+布什”、“里根+蒙代尔”、“福特+洛克菲勒”
#>[4]“卡特+戈尔”“克林顿+奎尔”
关于正则表达式
  • \\b
    是单词边界的限定符
  • [[:alpha:]
    是从A到z的一个字母
  • *
    与前一个字符零次或多次匹配
  • $
    分隔字符链的末尾
  • 然后
    \\b[:alpha:][\\b$
    匹配最后一个单词,这里是姓氏
tidyverse
它只是使用管道语法重写了前面的答案

库(stringr)
图书馆(purrr)
名单(总裁、副总裁)%>%
地图(样本)%>%
映射(str_extract,pattern=“\\b[:alpha:]+\\b$”%>%
调用(str_c,sep=“+”)
#>[1]“里根+奎尔”“克林顿+布什”“卡特+蒙代尔”
#>[4]“福特+戈尔”“布什+洛克菲勒”

可以进行粘贴(示例(sub(“.*”,“,总统))、示例(sub(“.*”,“,副总统)))
或类似操作。虽然两个字符串中的“Bush”都是他的两倍。@Davidernburg比我的答案好,把它作为一个答案发布,你会得到一个向上投票。可以做
粘贴(示例(sub(“*”,“,”,presidents)),示例(sub(“*”,“,副.presidents))
等等。虽然你可以得到两个字符串中“布什”的两倍于他的出现。@DavidArenburg比我的答案更好,但把它作为一个答案贴出来,你会得到一个向上的投票。