R 在分隔符字符串中的第n个大写字母之前插入分隔符

R 在分隔符字符串中的第n个大写字母之前插入分隔符,r,string,R,String,我目前有一个导入CSV数据的数据框。这是一个名字和姓氏、职务和公司名称的列表。每个条目都位于单独的行上。姓名、职务和公司名称均大写 每行的格式如下: First LastTitle, Company 我想在“Title”之前插入一个逗号分隔符,这样我就可以将数据分为三列,就像这个问题的第二个答案一样: 基本上,在这种特殊情况下,我希望在每个字符串中找到第三个大写字母,然后在其前面插入逗号分隔符。 此答案显示了如何拆分大写字母的字符串,但似乎只找到第一个大写字母: 欢迎提供任何建议。将字符串拆分

我目前有一个导入CSV数据的数据框。这是一个名字和姓氏、职务和公司名称的列表。每个条目都位于单独的行上。姓名、职务和公司名称均大写

每行的格式如下:

First LastTitle, Company
我想在“Title”之前插入一个逗号分隔符,这样我就可以将数据分为三列,就像这个问题的第二个答案一样:

基本上,在这种特殊情况下,我希望在每个字符串中找到第三个大写字母,然后在其前面插入逗号分隔符。

此答案显示了如何拆分大写字母的字符串,但似乎只找到第一个大写字母:


欢迎提供任何建议。

将字符串拆分为字符向量,然后使用
grep
查找大写字母的位置,然后取第三个位置

str <- "First LastTitle, Company"
tmp_str <- unlist(strsplit(str, ""))
ind <- grep("[A-Z]", tmp_str)[3]
paste0(c(tmp_str[1:(ind-1)], ",", tmp_str[ind:nchar(str)]), collapse="")
#[1] "First Last,Title, Company"

str您可以在一个大写字符和几个非大写字符的两种模式后插入逗号:

x <- "First LastTitle, Company"

sub("(([A-Z][^A-Z]+){2})(.*)","\\1,\\3",x)
[1] "First Last,Title, Company"
x试试这个:

gsub('([a-z])(?=[A-Z])','\\1,',str,perl=T)
[1] "First Last,Title, Company"

这很有效。如果我有一个3000行的数据帧,在每行上运行它的最快方式是什么?我能把每一行转换成一个字符向量吗?你可以使用apply(df,1,function(row)…)。这将对名为df的数据帧的每一行应用一个函数
df2=apply(df,1,unlist(strsplit(df,”)))
似乎不起作用,
df2=apply(df,1,unlist(row(df,”)))
返回:
“strsplit(row,”)中的错误:非字符参数”
。我可以将以上两个步骤合并到一个apply()函数中吗?@ceph第三个参数接受一个函数,因此在您的情况下,您可能需要'df2 Ok,我现在明白了“function”是按字面意思使用的。我的数据在一列中。但当我运行您的代码时,我得到:
strsplit(str,“”)中的错误:非字符参数
。我清除了我的环境,并用read.csv再次加载了csv,但运气不好。如何将其与apply()一起使用?我需要将每一行转换为字符串吗?