首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多因素组(析因)数据。错误:不兼容大小(0),期望1(组大小)或1

多因素组(析因)数据。错误:不兼容大小(0),期望1(组大小)或1
EN

Stack Overflow用户
提问于 2016-08-19 10:01:31
回答 1查看 579关注 0票数 1

这个帖子是Changing line color in ggplot based on "several factors" slope的后续文章

我想按"PQ“将数据分组(如下所示),但是我得到了以下错误:

“不兼容大小(0),期望1(组大小)或1”

数据

代码语言:javascript
复制
ID<-c("A_P1","A_P1","A_P1","A_P1","A_P1","A_P2","A_P2","A_P2","A_P2","A_P2","A_P2","B_P1","B_P1","B_P1","B_P1","B_P1","B_P1","B_P1","B_P1","B_P2","B_P2","B_P2","B_P2","B_P2","B_P2","B_P2","B_P2")
Q<-c("C1","C1","C2","C3","C3","C1","C1","C2","C2","C3","C3","Q1","Q1","Q1","Q1","Q3","Q3","Q4","Q4","Q1","Q1","Q1","Q1","Q3","Q3","Q4","Q4")
PQ<-c("A_P1C1","A_P1C1","A_P1C2","A_P1C3","A_P1C3","A_P2C1","A_P2C1","A_P2C2","A_P2C2","A_P2C3","A_P2C3","B_P1Q1","B_P1Q1","B_P1Q1","B_P1Q1","B_P1Q3","B_P1Q3","B_P1Q4","B_P1Q4","B_P2Q1","B_P2Q1","B_P2Q1","B_P2Q1","B_P2Q3","B_P2Q3","B_P2Q4","B_P2Q4")
AS<-c("CF","CF","CF","CF","CF","CTF","CTF","CTF","CTF","CTF","CTF","CTF","CTF","CTF","CTF","CTF","CTF","CTF","CTF","CTF","CTF","CTF","CTF","CTF","CTF","CTF","CTF")
N<-c("N2","N3","N3","N2","N3","N2","N3","N2","N3","N2","N3","N0","N1","N2","N3","N1","N3","N0","N1","N0","N1","N2","N3","N1","N3","N0","N1")
Value<-c(4.7,8.61,8.34,5.89,8.36,1.76,2.4,5.01,2.12,1.88,3.01,2.4,7.28,4.34,5.39,11.61,10.14,3.02,9.45,8.8,7.4,6.93,8.44,7.37,7.81,6.74,8.5)

df<-data.frame(ID=ID,Q=Q,PQ=PQ,AS=AS,N=N,Value=Value)

传递错误代码

代码语言:javascript
复制
#calculate slopes for N0 and N1
    df %>% 
      filter(N=="N0" | N=="N1") %>%
      group_by(PQ) %>%
      # use diff to calculate slope
      mutate(slope = diff(Value)) -> dat01

#calculate slopes for N0 and N2
    df %>% 
      filter(N=="N0" | N=="N2") %>%
      group_by(PQ) %>%
      # use diff to calculate slope
      mutate(slope = diff(Value)) -> dat02

此外,我想计算剩余的"PQ“因子的斜率(如果存在),即N0-N3;N1-N2 .诸若此类

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-19 10:12:41

此错误是由于与原始数据集相关的diff输出的长度不同造成的。它返回的元素比原始数据少一个。因此,添加0或NA将解决这个问题。

代码语言:javascript
复制
df %>% 
   filter(N=="N0" | N=="N1") %>%
   group_by(PQ) %>% 
   mutate(slope = c(0, diff(Value)))

为了使其紧凑,我们可以在有多个元素时使用==,而不是%in%

代码语言:javascript
复制
df %>%
   filter(N %in%  paste0("N", 0:1)) %>%
   group_by(PQ) %>%
   mutate(slope = c(0, diff(Value)))

关于第二个问题,对于'N‘中的所有组合,在'N’的unique元素上使用unique,根据组合值对'N‘进行filter,在按'PQ’分组之后,计算‘diff’的值。输出将是一个list,正如我们指定的simplify = FALSE

代码语言:javascript
复制
combn(as.character(unique(df$N)),2, FUN = function(x) df %>% 
            filter(N %in% x) %>% 
            group_by(PQ) %>%
            mutate(slope = c(0, diff(Value))), simplify = FALSE )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39036198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档