Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
错误:在dplyr中变异时大小不兼容_R_Dplyr - Fatal编程技术网

错误:在dplyr中变异时大小不兼容

错误:在dplyr中变异时大小不兼容,r,dplyr,R,Dplyr,我对dplyr中的mutate函数有问题,错误是: Error: incompatible size (0), expecting 5 (the group size) or 1 有一些以前的帖子,我尝试了一些解决方案,但我的案例运气不佳 这是我试过的 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,gro

我对dplyr中的
mutate
函数有问题,错误是:

Error: incompatible size (0), expecting 5 (the group size) or 1
有一些以前的帖子,我尝试了一些解决方案,但我的案例运气不佳

这是我试过的

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
错误:大小不兼容(0),应为5(组大小)或1

我还添加了
do
并尝试了

do(data.frame(., c1=ff[head(which(.$forward>0),1)],c2=ff[tail(which(.$backward>0),1)]))
数据帧中有错误。c1=ff[头部(其中(.$forward>0),1)],c2=ff[尾部(其中(.$forward>): 参数表示不同的行数:5、1、0


但是当我只做了
mutate
列的时候,一切似乎都在运行。为什么呢?

通过管道查看发生了什么可能是有益的

df %>%
  group_by(group)%>%
  mutate(flip=as.numeric(flip),direc=ifelse(c(0,diff(ff))<0,"backward","forward"))%>%
  spread(direc,flip)%>%
  arrange(group,group)
# Source: local data frame [10 x 4]
# Groups: group [2]
#       ff  group backward forward
#    <dbl> <fctr>    <dbl>   <dbl>
# 1   -0.2      1        1      NA
# 2   -0.1      1        1      NA
# 3    0.0      1        1       0
# 4    0.1      1       NA       0
# 5    0.2      1       NA       1
# 6   -0.2      2        0      NA
# 7   -0.1      2        0      NA
# 8    0.0      2        0       1
# 9    0.1      2       NA       1
# 10   0.2      2       NA       0

为了对
ff
进行有意义的索引,您需要在报税表中使用除
整数(0)
以外的其他内容。

只需扩展@allistaire的评论即可

  • 您指定的条件是错误的原因。具体来说,
    tail(which(backward>0),1)
  • 可以对给定代码进行优化,以消除
    spread()
  • 你可以试试

    dff <- df%>%
      group_by(group)%>%
      mutate(flip=as.numeric(flip),direc=ifelse(c(0,diff(ff))<0,"backward","forward"))%>%
      arrange(group)%>%
      mutate(c1=ff[head(which(direc=="forward" & flip > 0),1)])
    
    其中:

    Source: local data frame [12 x 6]
    Groups: group [2]
    
          ff  flip  group    direc    c1    c2
       <dbl> <dbl> <fctr>    <chr> <dbl> <dbl>
    1    0.0     0      1  forward   0.2  -0.2
    2    0.1     0      1  forward   0.2  -0.2
    3    0.2     1      1  forward   0.2  -0.2
    4    0.0     1      1 backward   0.2  -0.2
    5   -0.1     1      1 backward   0.2  -0.2
    6   -0.2     1      1 backward   0.2  -0.2
    7    0.0     1      2  forward   0.0  -0.2
    8    0.1     1      2  forward   0.0  -0.2
    9    0.2     0      2  forward   0.0  -0.2
    10   0.0     1      2 backward   0.0  -0.2
    11  -0.1     1      2 backward   0.0  -0.2
    12  -0.2     1      2 backward   0.0  -0.2
    
    来源:本地数据帧[12 x 6]
    分组:分组[2]
    ff翻转群方向c1 c2
    1 0.0 0 1向前0.2-0.2
    2 0.1 0 1向前0.2-0.2
    3 0.2 1向前0.2-0.2
    4 0.0 1向后0.2-0.2
    5-0.1向后0.2-0.2
    6-0.21向后0.2-0.2
    7 0.0 1 2向前0.0-0.2
    8 0.1 1 2向前0.0-0.2
    9 0.2 0 2向前0.0-0.2
    10 0.0 1 2向后0.0-0.2
    11-0.1 1 2向后0.0-0.2
    12-0.2 1 2向后0.0-0.2
    
    最后一行应该是
    mutate(c1=头部(ff[向前>0],1),c2=尾部(ff[向后>0],1))
    (在本例中,两者都给出NA)组2中没有大于0的值。@alistaire即使没有值,我也应该能够为空行获取至少NA值,对吗?如果您调整
    mutate
    以返回NA,如果计算的
    长度为0,则返回NA,是。@alistaire好的。我得到了。谢谢!很抱歉,似乎没有c2的输出?我说的对吗?这一点实际上是alistaire的,但我并没有假设这是你的逻辑。我的回答是严格地回答“为什么”这个问题,假设你可以修复有缺陷的逻辑。(更正,这一点是@Sotos的观点。)SO问题中的一个常见遗漏(在“可验证”下暗示)就是提供一个预期输出的样本。有时,这可以像生成一个静态data.frame一样简单,其中包含您期望的值,或者至少是它们的外观。特别是对于复杂的输入结构,如果使用小而有代表性的数据问问题,几乎总是对每个人都有利;在这种情况下,通常是m这更容易决定输出应该是什么。谢谢你的回答。但是你的解决方案似乎对我的实际df不起作用。翻转顺序非常重要,不能更改。当你更改为
    Flip时,为什么要更改
    Flip
    列?不能更改,因为我无法更改
    在我的read df中翻转
    顺序。我只是将其作为示例进行了更改。您需要了解此处错误的原因,即对于
    c2
    direc==“backward”&flip>0
    不满足示例中的两个组,返回的结果向量的长度与组数不同。
    dff <- df%>%
      group_by(group)%>%
      mutate(flip=as.numeric(flip),direc=ifelse(c(0,diff(ff))<0,"backward","forward"))%>%
      arrange(group)%>%
      mutate(c1=ff[head(which(direc=="forward" & flip > 0),1)])
    
    dff <- df%>%
      group_by(group)%>%
      mutate(flip=as.numeric(flip),direc=ifelse(c(0,diff(ff))<0,"backward","forward"))%>%
      arrange(group)%>%
      mutate(c1=ff[head(which(direc=="forward" & flip > 0),1)]) %>%
      mutate(c2=ff[tail(which(direc=="backward"& flip >0),1)])
    
    Source: local data frame [12 x 6]
    Groups: group [2]
    
          ff  flip  group    direc    c1    c2
       <dbl> <dbl> <fctr>    <chr> <dbl> <dbl>
    1    0.0     0      1  forward   0.2  -0.2
    2    0.1     0      1  forward   0.2  -0.2
    3    0.2     1      1  forward   0.2  -0.2
    4    0.0     1      1 backward   0.2  -0.2
    5   -0.1     1      1 backward   0.2  -0.2
    6   -0.2     1      1 backward   0.2  -0.2
    7    0.0     1      2  forward   0.0  -0.2
    8    0.1     1      2  forward   0.0  -0.2
    9    0.2     0      2  forward   0.0  -0.2
    10   0.0     1      2 backward   0.0  -0.2
    11  -0.1     1      2 backward   0.0  -0.2
    12  -0.2     1      2 backward   0.0  -0.2