通常需要将全名(和头衔等)分成多个列,以按“姓氏”字母顺序排序行。当单个列包含完整姓名时,我从未遇到过在SQL中实现这一点的简单方法。
但是,我知道R有数千个库 - 尽管我还没有遇到任何可以在不将名字,姓氏和头衔分别放入自己的列中就能做到这一点的示例 - 但我想看看是否有一种稍微更有效的方法来处理这种情况。
我正在使用具有单个列的完整名称的数据集。例如:
但是,我知道R有数千个库 - 尽管我还没有遇到任何可以在不将名字,姓氏和头衔分别放入自己的列中就能做到这一点的示例 - 但我想看看是否有一种稍微更有效的方法来处理这种情况。
我正在使用具有单个列的完整名称的数据集。例如:
Names
1 Robert Johnson
2 Billy Joel
3 Donald Fagen
4 Trent Reznor
5 Wolfgang Mozart
我需要按字母顺序对它们进行排序,而不创建其他列。到目前为止,我不确定这是否可能,但我找到了一个相对轻松的解决方法。幸运的是,每个名称都遵循“名字”(空格)“姓氏”的约定。因此,我可以使用tidyr库中的separate()函数轻松地隔离出姓氏:
library(tidyverse)
library(magrittr)
# Separate into "first name" and "last name" columns
data %<>% separate(Names, c('first_name', 'last_name'), sep = ' ')
first_name last_name
1 Robert Johnson
2 Billy Joel
3 Donald Fagen
4 Trent Reznor
5 Wolfgang Mozart
接下来,我可以使用arrange()函数按字母顺序对新的“last name”列进行排序并立即使用unite()函数重建原始列:
# Arrange rows alphabetically by last name
data %<>% arrange(last_name)
# Rebuild original column and dissolve temporary 2nd column
data %>% unite(Names, first_name:last_name, sep=' ')
这样可以成功重建原始表,并通过姓氏字母顺序排列“Names”列。是否有另一种方法可以实现此操作而无需甚至暂时创建第二个“姓氏”列?接受任何额外的R库。谢谢!