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)
如果有更高效或更方便的方式,请随时分享.
我可以想到两种方法来解决这个问题.一个是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)