R更改数据框中的元素

Ano*_*non 2 replace element r strsplit

正如标题所说,我正试图将数据框中的元素从一个字符更改为另一个字符.数据框如下:

g1=c("CC","DD","GG")
g2=c("AA","BB","EE")
g3=c("HH","II","JJ")

df=data.frame(g1,g2,g3)
Run Code Online (Sandbox Code Playgroud)

我希望将元素从信件格式转换为字母/字母格式(例如CC到C/C或AA到A/A)

我知道使用"strsplit"可以在列表中工作.我也知道我需要以某种方式合并:collapse ="/"

我怎样才能将strsplit函数应用于整个数据框?

我正在思考以下问题:

split=function(x)
{
  unlist(paste(strsplit(x,""),collapse="/"))
}

j=as.data.frame(apply(df,1,split))
Run Code Online (Sandbox Code Playgroud)

但它没有给出预期的结果.

更新----------------显然,以下脚本有效:

split=function(x)
{
  paste(unlist(strsplit(x,"")),collapse="/")
}

p=apply(df,c(1,2),split)
Run Code Online (Sandbox Code Playgroud)

如果有更高效或更方便的方式,请随时分享.

Jos*_*ich 6

我可以想到两种方法来解决这个问题.一个是strsplit像你一样使用.您只是错过了循环返回列表中每个元素的部分strsplit:

Split <- function(x) {
  #unlist(lapply(strsplit(x, ""), paste, collapse="/"))
  sapply(strsplit(x, ""), paste, collapse="/")
}
as.data.frame(lapply(df, Split))
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用gsub\\B符号,它匹配不在"单词"的开头或结尾的空字符串.

as.data.frame(lapply(df, gsub, pattern="\\B", replacement="/"))
Run Code Online (Sandbox Code Playgroud)

什么构成"单词"取决于语言环境和实现,所以这是使用gsub和反向引用的另一种解决方案.

as.data.frame(lapply(df, gsub, pattern="(.)(.)", replacement="\\1/\\2"))
Run Code Online (Sandbox Code Playgroud)