错误:在dplyr中变异时大小不兼容
我对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
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