下面的代码在最后一列中生成一个长度为6的向量,从该列我想在我的tibble中提取6个新列 .
require(tidyverse)
require(purrrlyr)
# this function will return a vector of the same length (6) for each group
fun=function(X,Y){
mycut<-cut(X,breaks=seq(50,350,by=50),right=FALSE)
v<-tapply(Y,mycut,sum)
return(v)
}
# use the previous function to count gears per class of hp
mtcars %>%
group_by(cyl) %>%
by_slice(~fun(.x$hp,.x$gear)) %>%
rename(cut=.out)
在这里,我的列切割中有一个向量
# tibble [3 x 2]
cyl cut
<fctr> <list>
1 4 <dbl [6]>
2 6 <dbl [6]>
3 8 <dbl [6]>
从这个向量传递给像这样的表需要什么命令?
cyl [50,100) [100,150) [150,200) [200,250) [250,300) [300,350)
4 36 9 NA NA NA NA
...
unnest
不起作用 . 我是否必须使用 by_row
或者是否有更简单的答案?
2 回答
我们需要将'cut'变量的
names
作为新列,然后在list
元素之后执行spread
重塑为'wide'格式我会建议另一种方法 . 您可以使用以下代码,而不是使用已弃用的
by_slice()
函数(现在在purrrlyr包中重复使用):这给出了以下输出