我需要使用tidyr/dplyr作為%>%管道的一部分來完成一項爭吵任務。也就是說,無需將資料分配給輔助物件。我有以下trb tibble作為給定的:
library(tibble)
trb <-
tribble(~name, ~type, ~dat,
"john", "cat", mtcars,
"john", "spider", Puromycin,
"amanda", "dog", ToothGrowth,
"chris", "wolf", PlantGrowth,
"annie", "lion", women,
"richard", "frog", trees,
"liz", "horse", USArrests,
"raul", "snake", iris,
"kate" , "bear", quakes)
我想做一個兩步爭論(不一定按以下順序):
- 將john的
dat資料幀集中到一個命名串列中(其中名稱將來自type);和 - 將 john 的資訊移到最左邊,同時嵌套其他人的資料。
因此,期望的輸出應該是:
desired_output <-
tribble(~dat_john, ~other_people,
list("cat" = mtcars, "spider" = Puromycin), trb %>% dplyr::filter(name != "john")
)
如上所述,對我來說,從使用trb到desired_output使用很重要%>%。有任何想法嗎?
uj5u.com熱心網友回復:
也許是這樣的?它首先將資料分類為john或不分類,然后將每個類別的所有資料嵌套到一個串列中,然后將這兩個類別廣泛旋轉。
library(tidyr); library(dplyr)
trb %>%
mutate(column = if_else(name == "john", "dat_john", "other people")) %>%
nest(-column) %>%
pivot_wider(names_from = column, values_from = data)
uj5u.com熱心網友回復:
可以通過一系列管道來實作您想要的。但我不確定你為什么要這樣做。請注意,您需要手動將“john”分配為第一級并重新排列資料框。否則,如果“john”不是第一個條目,您將無法將他帶到最左邊pivot_wider。
library(dplyr)
library(tidyr)
trb %>%
group_by(id = factor(name != "john", labels = c("dat_john", "other_people"))) %>%
arrange(id) %>% # use factor and arrange to ensure that john is always the first level
nest(data = -id) %>%
pivot_wider(names_from = id, values_from = data) %>%
mutate(dat_john = with(dat_john[[1L]], list(setNames(dat, type))))
輸出
# A tibble: 1 x 2
dat_john other_people
<list> <list>
1 <named list [2]> <tibble [7 x 3]>
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/409150.html
標籤:
上一篇:在4次迭代后進行for回圈更改——即以四個為一組運行for回圈,中間有單獨的函式
下一篇:以特定方式替換陣列中的字母
