首页 > 解决方案 > 将R中的某些行拆分为多行?

问题描述

有没有办法把这些数据...

Month      Animal        Number    CodeName
8-9       cat             2         whiskers
3-4       cat|dog         1|4       whiskers|spot
10-11     elephant        5         trunks
7-8       cat|snake       3|2       whiskers|thomas
5-6       elephant|dog    0|7       trunks|spot

在这...

Month      Animal        Number    CodeName
8-9         cat           2         whiskers
3-4         cat           1         whiskers
3-4         dog           4         spot
10-11       elephant      5         trunks
7-8         cat           3         whiskers
7-8         snake         2         thomas
5-6         elephant      0         trunks
5-6         dog           7         spot

通过打破管道?

我将保持 Month 列相同,但 Animal、Number 和 CodeName 管道列将被拆分。

我为此尝试的最后一个代码是......

df %>% 分离行(。,动物,数字,代号,转换 = TRUE)

但我收到“长度不兼容”的错误。

任何帮助将不胜感激

标签: rstringsplittidyr

解决方案


您可以使用separate_rowsfrom tidyr,但您必须正确地将sep参数指定为sep = "\\|"。请注意,您必须转义|,因为在正则表达式中它是一个特殊字符:

df <- read.table(text = "Month      Animal        Number    CodeName
8-9       cat             2         whiskers
3-4       cat|dog         1|4       whiskers|spot
10-11     elephant        5         trunks
7-8       cat|snake       3|2       whiskers|thomas
5-6       elephant|dog    0|7       trunks|spot", header = TRUE, stringsAsFactors = FALSE)

library(dplyr)
library(tidyr)

df %>% separate_rows(Animal, Number, CodeName, sep = "\\|")
  Month   Animal Number CodeName
1   8-9      cat      2 whiskers
2   3-4      cat      1 whiskers
3   3-4      dog      4     spot
4 10-11 elephant      5   trunks
5   7-8      cat      3 whiskers
6   7-8    snake      2   thomas
7   5-6 elephant      0   trunks
8   5-6      dog      7     spot

推荐阅读