[英]How to repeat the concatenation of strings per letter in a string of letters with no spaces or with dashes?
以下是我正在使用的数据框的简化版本,尽管是代表性版本。
df <- rbind( data.frame(masterConfig = rep("ABC", 5), subConfig = rep("xyz", 5)),
data.frame(masterConfig = rep("BFG", 5), subConfig = rep("i-k", 5)) )
我正在尝试在上述数据框中生成第三列,分别对应前五行和后五行:
“ ABC x,ABC y,ABC z”
“ BFG i,BFG j,BFG k”
感谢您的帮助!
我们可以写一个检查功能if
“ - ”出现在subConfig
列然后将其分解,并创造了一系列的他们之间的字母或else
只是将其分解的每一个字符。
get_broken_letters <- function(x) {
if (grepl("-", x)) {
indx <- which(letters %in% strsplit(x, "-")[[1]])
letters[indx[1]:indx[2]]
}
else {
strsplit(x, "")[[1]]
}
}
然后针对每行我们使用应用功能sapply
和paste
他们masterConfig
列
df$new_column <- sapply(1:nrow(df), function(x)
paste(df$masterConfig[x],get_broken_letters(df$subConfig[x]), collapse = " "))
df
# masterConfig subConfig new_column
#1 ABC xyz ABC x ABC y ABC z
#2 ABC xyz ABC x ABC y ABC z
#3 ABC xyz ABC x ABC y ABC z
#4 ABC xyz ABC x ABC y ABC z
#5 ABC xyz ABC x ABC y ABC z
#6 BFG i-k BFG i BFG j BFG k
#7 BFG i-k BFG i BFG j BFG k
#8 BFG i-k BFG i BFG j BFG k
#9 BFG i-k BFG i BFG j BFG k
#10 BFG i-k BFG i BFG j BFG k
数据
df <- data.frame(masterConfig = c(rep("ABC", 5), rep("BFG", 5)),
subConfig = c(rep("xyz", 5), rep("i-k", 5)), stringsAsFactors = FALSE)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.