连接R中的字符向量,其中某些元素具有0个字符

连接R中的字符向量,其中某些元素具有0个字符,r,string,character,concatenation,paste,R,String,Character,Concatenation,Paste,我有字符向量,其中一些元素有0个字符。我想连接它们,但忽略以下0个元素: x <- c("a", "b", "", "d", "", "f") y <- c("a", "", "c", "", "e", "f") z <- c("a", "", "c", "d", "", "f") paste(x, y, z, sep = ":") # This gives: # [1] "a:a:a" "b::" ":c:c" "d::d" ":e:" "f:f:f" # B

我有字符向量,其中一些元素有0个字符。我想连接它们,但忽略以下0个元素:

x <- c("a", "b", "", "d", "", "f")
y <- c("a", "", "c", "", "e", "f")
z <- c("a", "", "c", "d", "", "f")

paste(x, y, z, sep = ":")
# This gives:
# [1] "a:a:a" "b::"   ":c:c"  "d::d"  ":e:"   "f:f:f"

# But I want this:

# "a:a:a" "b"   "c:c"  "d:d"  "e"   "f:f:f"
Reduce(function (x,y) ifelse(x==""|y=="",paste0(x,y),paste(x,y,sep=":")),list(x,y,z))
[1] "alpah beta:alpha:alpha" "better"                 "c:can of worms"        
[4] "delta:delta"            "fox, one"

x您可以
0
将它们粘贴在一起,这将忽略空格,然后
strsplit
将每个字符粘贴在一起,然后
将它们重新粘贴在一起,并使用
折叠:

sapply(strsplit(paste0(x,y,z),""),paste,collapse=":")
[1] "a:a:a" "b"     "c:c"   "d:d"   "e"     "f:f:f"
更新的示例

另一种方法是使用<代码> Reals和自定义函数来检查空白元素:

x <- c("a", "b", "", "d", "", "f")
y <- c("a", "", "c", "", "e", "f")
z <- c("a", "", "c", "d", "", "f")

paste(x, y, z, sep = ":")
# This gives:
# [1] "a:a:a" "b::"   ":c:c"  "d::d"  ":e:"   "f:f:f"

# But I want this:

# "a:a:a" "b"   "c:c"  "d:d"  "e"   "f:f:f"
Reduce(function (x,y) ifelse(x==""|y=="",paste0(x,y),paste(x,y,sep=":")),list(x,y,z))
[1] "alpah beta:alpha:alpha" "better"                 "c:can of worms"        
[4] "delta:delta"            "fox, one"

您可以
0
将它们粘贴在一起,这将忽略空格,然后
strsplit
将每个字符粘贴在一起,然后
将它们重新粘贴在一起,并使用
折叠

sapply(strsplit(paste0(x,y,z),""),paste,collapse=":")
[1] "a:a:a" "b"     "c:c"   "d:d"   "e"     "f:f:f"
更新的示例

另一种方法是使用<代码> Reals和自定义函数来检查空白元素:

x <- c("a", "b", "", "d", "", "f")
y <- c("a", "", "c", "", "e", "f")
z <- c("a", "", "c", "d", "", "f")

paste(x, y, z, sep = ":")
# This gives:
# [1] "a:a:a" "b::"   ":c:c"  "d::d"  ":e:"   "f:f:f"

# But I want this:

# "a:a:a" "b"   "c:c"  "d:d"  "e"   "f:f:f"
Reduce(function (x,y) ifelse(x==""|y=="",paste0(x,y),paste(x,y,sep=":")),list(x,y,z))
[1] "alpah beta:alpha:alpha" "better"                 "c:can of worms"        
[4] "delta:delta"            "fox, one"

这里有一个使用
gsub

gsub("^:+|:+$|:(?=:)", "", paste(x, y, z, sep = ":"), perl = TRUE)
#[1] "a:a:a" "b"     "c:c"   "d:d"   "e"     "f:f:f"
使现代化 上述代码也适用于更新后的示例(OP更改了分隔符,我们也在更改它)


注意:“x”中OP的输入字符串是
alpah

这里有一个使用
gsub

gsub("^:+|:+$|:(?=:)", "", paste(x, y, z, sep = ":"), perl = TRUE)
#[1] "a:a:a" "b"     "c:c"   "d:d"   "e"     "f:f:f"
使现代化 上述代码也适用于更新后的示例(OP更改了分隔符,我们也在更改它)


注意:“x”中OP的输入字符串是
alpah

可以对输出进行后期处理以删除::或:从字符串的开头或结尾。可以对输出进行后期处理以删除::或:从字符串的开头或结尾。谢谢,我简化了示例,但是当字符向量中包含单词或句子时,这将不起作用。我将编辑这个问题。@CCID我添加了另一种方法,适用于新的示例谢谢,我简化了示例,但是当字符向量中包含单词或句子时,这将不起作用。我将编辑该问题。@CCID我添加了另一种方法,该方法将适用于新示例