我是学习R的初学者,我有一个包含书名和作者的数据集,我用它来练习清理数据。在这个过程的一部分,我想把列“author”分成“first_name”和“last_name”。
当我执行此任务时,我得到以下消息:
library(tidyr)
# - Seperate author first and last name
separate(df, col="author", into = c("first_name","last_name"), sep=" ")
Warning message:
Expected 2 pieces. Additional pieces discarded in
18 rows [4, 12, 16, 17, 21, 23, 28, 34, 41, 43, 46, 60, 65, 67, 73,
79, 82, 84].
回头看看数据,我可以看到错误主要发生在有中间名或中间名首字母的作者身上(例如。路易莎梅奥尔科特)。我想查找警告消息中所述的行,以便在清理之前删除额外的空间。有没有办法做到这一点?
我尝试使用
df[4,12,16,17,21,23,28,34,41,43,36,60,65,67,73,79,82,84]
但是我得到了一个错误消息,因为R试图将它们作为列拉出来,而数据集没有那么多列。我已经浏览了一些搜索板,寻找执行此任务所需的代码,但我遇到的解决方案并不完全适用于这个问题,而且似乎比他们需要的更多。
有没有一个简单的方法来解决这个问题?或者我应该以不同的方式来处理数据?
1条答案
按热度按时间5ssjco0h1#
扩展我的评论,这里有一个例子来说明我的意思:
使用正则表达式,我们可以捕获最后一个空格(
last_name
)之后的所有内容和最后一个空格(first name
)之前的所有内容。在某些情况下,这将不起作用,例如“文森特货车高”。这里有一个空格在姓氏中--只是在使用这个时要注意的一些事情。我认为
separate
在使用一致的分隔符时工作得很好,但这里有些人有三个空格,而另一些人只有两个。你仍然可以用这样的逻辑来强迫它:最后,如果你在你的帖子中提到,在这种情况下删除空间是有意义的,你可以这样做: