#> 5 中国 1999 212258 1272915272 #> 6 中国 2000 213766 1280428583
你还可以向 sep 传递一个整数向量。separate() 会将这些整数解释为拆分的位置。正值从字符串最左侧的 1 开始计数;负值从字符串最右侧的 –1 开始计数。使用整数来分隔字符串时,sep 的长度应该比 into 中名称的数量少一。
你可以使用这种设置来分离每个年份的最后两位数字。这会使数据变得不那么整洁,但在其他情况下很有用,稍后你会看到:
table3 %>% separate(year, into = c("century", "year"), sep = 2) #> # A tibble: 6 × 4 #> country century year rate #> *
合并
unite() 是 separate() 的逆操作:它将多个列合并为一个列。你使用它的频率会比 separate() 低得多,但它仍然是一个值得掌握的实用工具。
我们可以使用 unite() 将上一个示例中创建的 century 和 year 列重新合并。该数据保存为 tidyr::table5。unite() 接受一个数据框、要创建的新变量的名称,以及要合并的一组列,同样使用 dplyr::select() 语法指定。结果如图 9-5 以及下面的代码所示:
table5 %>% unite(new, century, year) #> # A tibble: 6 × 3 #> country new rate #> *