我正在尝试使用pivot_longger()来创建两个变量而不是一个。我的两个变量名应该是“stage”和“stock”以及它们对应的值。“stage”列应该包括rec,tadult和teggs。“stock”列应该有recStk,teggStk和tadultStk。我在下面的一个虚拟例子中尝试了names_pattern,但是我显然不知道如何使用模式。有人能帮助我吗?先谢了。
pivot_test <- structure(list(year = 1991:1996, rec = c(1635970, 1269210, 927557,
1312280, 1387800, 1772490), teggStk = c(419648000, 411314000,
445784000, 434684000, 364483000, 686490000), tadultStk = c(84009.2,
58228.6, 65226.2, 44371.9, 65555.1, 79610.6), tadult = c(84009.2,
58228.6, 65226.2, 44371.9, 65555.1, 79610.6), teggs = c(419648000,
411314000, 445784000, 434684000, 364483000, 686490000), recStk = c(1635970,
1269210, 927557, 1312280, 1387800, 1772490)), row.names = c(NA,
6L), class = "data.frame")
year rec teggStk tadultStk tadult teggs recStk
1 1991 1635970 419648000 84009.2 84009.2 419648000 1635970
2 1992 1269210 411314000 58228.6 58228.6 411314000 1269210
3 1993 927557 445784000 65226.2 65226.2 445784000 927557
4 1994 1312280 434684000 44371.9 44371.9 434684000 1312280
5 1995 1387800 364483000 65555.1 65555.1 364483000 1387800
6 1996 1772490 686490000 79610.6 79610.6 686490000 1772490
annual21atest <- pivot_test %>% pivot_longer(-c("year"),
names_to=c("stage","stock"),
names_pattern = "([A-Za-z]+)([A-Za-z]+)",
values_to="quantity") %>% data.frame()
The final dataframe should have 4 columns:
year stage stock quantity
1991 rec recStk 00000
1992 tadult tadultStk 00000
1993 teggs teggsStk 0000
...............................
3条答案
按热度按时间chhqkbe11#
这里有一个可能的解决方案,这个问题有点奇怪,因为你得到了stage和stock的重复值,而
pivot_longer
不知道如何自动折叠,相反,我们从一开始就删除重复值,然后它是一个单独的调用:其返回
uplii1fm2#
主要的挑战是获得正确的名称模式:
am46iovg3#
为什么不直接将对
tidyr::pivot_longer()
的“stock”调用转换为对tidyr::pivot_longer()
的“stage”调用,反之亦然呢?结果就是您所要求的:
为了简洁起见,您也可以像这样 Package 函数:
然后像这样使用它: