我在dplyr中遇到了 mutate
函数的问题,错误说明了;
Error: incompatible size (0), expecting 5 (the group size) or 1
有一些以前的帖子,我尝试了一些解决方案,但我的情况没有运气 .
group-factorial-data-with-multiple-factors-error-incompatible-size-0-expe
r-dplyr-using-mutate-with-na-omit-causes-error-incompatible-size-d
grouped-operations-that-result-in-length-not-equal-to-1-or-length-of-group-in-dp
这是我试过的,
ff <- c(seq(0,0.2,0.1),seq(0,-0.2,-0.1))
flip <- c(c(0,0,1,1,1,1),c(1,1,0,0,0,0))
df <- data.frame(ff,flip,group=gl(2,6))
> df
ff flip group
1 0.0 0 1
2 0.1 0 1
3 0.2 1 1
4 0.0 1 1
5 -0.1 1 1
6 -0.2 1 1
7 0.0 1 2
8 0.1 1 2
9 0.2 0 2
10 0.0 0 2
11 -0.1 0 2
12 -0.2 0 2
我想根据以下一些条件添加名为 c1
和 c2
的新组
dff <- df%>%
group_by(group)%>%
mutate(flip=as.numeric(flip),direc=ifelse(c(0,diff(ff))<0,"backward","forward"))%>%
spread(direc,flip)%>%
arrange(group,group)%>%
mutate(c1=ff[head(which(forward>0),1)],c2=ff[tail(which(backward>0),1)])
错误:不兼容的大小(0),期望5(组大小)或1
我还添加 do
并尝试过
do(data.frame(., c1=ff[head(which(.$forward>0),1)],c2=ff[tail(which(.$backward>0),1)]))
data.frame中的错误( . ,c1 = ff [head(其中 . $ forward> 0),1)],c2 = ff [tail(其中 . $ back>:参数意味着行数不同:5, 1,0
但是当我只有 mutate
c1
列时,一切似乎都在起作用 . 为什么?
2 回答
只是扩展@ allistaire的评论 .
您指定的条件是导致错误的原因 . 具体来说,
tail(which(backward>0),1)
给定代码可以优化以摆脱
spread()
你可以试试
看起来你正在寻找每个
group
的direction
变化的流入点 . 在这种情况下,请详细说明翻转是如何相关的,或者如果您将flip <- c(c(0,0,1,1,1,1),c(1,1,0,0,0,0))
更改为flip <- c(c(0,0,1,1,1,1),c(1,1,0,1,1,1))
以便flip
标记在ff
的方向上更改,则可以使用这使:
通过管道查看正在发生的事情可能是有益的 .
顺便说一句:为什么
arrange(group,group)
?加倍订单变量毫无意义 .看这里,你会看到你有(1)
backward
的值不大于0.当你运行像which(FALSE)
这样的东西时,你会得到integer(0)
. 这可能是认识到dplyr
需要rhs的向量长度与组中行数相同的长度的好时机 .而不是
mutate
,我会稍微修改一下:返回which
调用c2
中返回的唯一值的数量:为了在
ff
上有意义地索引,您需要在回报中使用_1008546以外的其他内容 .