R 获取 data.frame 中 double/tripple-barrel 个姓氏的首字母
R get first letters of double/tripple-barrel surnames in data.frame
我有一个包含 2 列的数据框:
> df1
Surname Name
1 The Builder Bob
2 Zeta-Jones Catherine
我想添加第三列"Shortened_Surname",其中包含姓氏字段中所有单词的首字母:
Surname Name Shortened_Surname
1 The Builder Bob TB
2 Zeta-Jones Catherine ZJ
注意第二个名字中的“-”。我用 空格和连字符 .
分隔成桶形姓氏
我试过了:
第一步:
> strsplit(unlist(as.character(df1$Surname))," ")
[[1]]
[1] "The" "Builder"
[[2]]
[1] "Zeta-Jones"
我的研究表明我可以使用 strtrim
作为第 2 步,但我发现有很多方法可以避免这样做。
您可以使用环视定位 space、连字符和行首。例如,任何字符 (.
) 前面没有行首、space 或连字符都应替换为“”:
with(df, gsub("(?<!^|[ -]).", "", Surname, perl=TRUE))
[1] "TB" "ZJ"
或
with(df, gsub("(?<=[^ -]).", "", Surname, perl=TRUE))
第二个 gsub
将空格 (""
) 替换为前面不是 " "
或 "-"
的任何字符。
你可以试试这个,如果名称的格式如输入数据所示:
library(stringr)
df$Shortened_Surname <- sapply(str_extract_all(df$Surname, '[A-Z]{1}'), function(x) paste(x, collapse = ''))
输出如下:
Surname Name Shortened_Surname
1 The Builder Bob TB
2 Zeta-Jones Catherine ZJ
如果名称的格式有些不一致,您需要修改上面的模式来捕捉。您可以在模式内使用 |, &
运算符来组合多个模式。
我有一个包含 2 列的数据框:
> df1
Surname Name
1 The Builder Bob
2 Zeta-Jones Catherine
我想添加第三列"Shortened_Surname",其中包含姓氏字段中所有单词的首字母:
Surname Name Shortened_Surname
1 The Builder Bob TB
2 Zeta-Jones Catherine ZJ
注意第二个名字中的“-”。我用 空格和连字符 .
分隔成桶形姓氏我试过了:
第一步:
> strsplit(unlist(as.character(df1$Surname))," ")
[[1]]
[1] "The" "Builder"
[[2]]
[1] "Zeta-Jones"
我的研究表明我可以使用 strtrim
作为第 2 步,但我发现有很多方法可以避免这样做。
您可以使用环视定位 space、连字符和行首。例如,任何字符 (.
) 前面没有行首、space 或连字符都应替换为“”:
with(df, gsub("(?<!^|[ -]).", "", Surname, perl=TRUE))
[1] "TB" "ZJ"
或
with(df, gsub("(?<=[^ -]).", "", Surname, perl=TRUE))
第二个 gsub
将空格 (""
) 替换为前面不是 " "
或 "-"
的任何字符。
你可以试试这个,如果名称的格式如输入数据所示:
library(stringr)
df$Shortened_Surname <- sapply(str_extract_all(df$Surname, '[A-Z]{1}'), function(x) paste(x, collapse = ''))
输出如下:
Surname Name Shortened_Surname
1 The Builder Bob TB
2 Zeta-Jones Catherine ZJ
如果名称的格式有些不一致,您需要修改上面的模式来捕捉。您可以在模式内使用 |, &
运算符来组合多个模式。