既然purrr中的by_row()将被弃用,那么新的首选tidyverse实现是什么:
somedata = expand.grid(a=1:3,b=3,c=runif(3))
somedata %>%
rowwise() %>% do(binom.test(x=.$a,n=.$b,p=.$c) %>% tidy())
Run Code Online (Sandbox Code Playgroud)
看起来好像你可能将每一行嵌套到一个列中,然后使用map(),但我不确定如何进行嵌套操作......再加上它看起来有点模糊.有没有更好的办法?
假设我有:
data <- expand.grid(factor1 = c("a","b"),
factor2 = c("left","right"),
factor3 = c("up","down"))
Run Code Online (Sandbox Code Playgroud)
假设我想从这个数据帧中复制行,这样我就可以定义每个因子的频率分布,并且尽可能少地复制每一行以满足该分布.例如,如果我将"factor1"的频率定义为(.5,.5),将"factor2"定义为(.25,.75),将"factor3"定义为(.4,.6),则我的数据框必须有2 X 4 X 5 = 40总行数.我可以做这个:
data2 <- expand.grid(factor1 = c("a","b"),
factor2 = c("left",rep("right",3)),
factor3 = c(rep("up",2),rep("down",3)))
Run Code Online (Sandbox Code Playgroud)
但这只有在我提前知道频率的情况下才有效 - 即便如此,从(.4,.6)到c(rep("a",2),rep("b",3))
手工这样的传统似乎也不够优雅.有什么更好的方法呢?
我有一个具有以下结构的数据框:
language subID sessionID rdm
(chr) (fctr) (fctr) (chr)
1 Dutch 13602 13257 <data.frame [676,3]>
2 Dutch 13602 125354 <data.frame [676,3]>
3 Dutch 17790 19308 <data.frame [676,3]>
4 Dutch 37016 38221 <data.frame [676,3]>
5 Dutch 46830 47890 <data.frame [676,3]>
Run Code Online (Sandbox Code Playgroud)
我想将这个数据帧转换为676*n×6的数据帧 - 换句话说,取数据帧的rdm列并将其扩展到更大的数据帧.
我想能够做这样的事情:
bind_rows(data_frame$rdm,.id=c(data_frame$sessionID,data_frame$subID,data_frame$language))
Run Code Online (Sandbox Code Playgroud)
但是,显然,".id"属性不起作用.我如何获得我追求的数据框?