R 多因素分组(阶乘)数据。错误:大小(0)不兼容,应为1(组大小)或1

R 多因素分组(阶乘)数据。错误:大小(0)不兼容,应为1(组大小)或1,r,plyr,R,Plyr,这篇文章是对 我想按“PQ”对数据进行分组(如下),但我得到以下错误: 大小不兼容(0),应为1(组大小)或1 数据 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",

这篇文章是对

我想按“PQ”对数据进行分组(如下),但我得到以下错误:

大小不兼容(0),应为1(组大小)或1

数据

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)

此外,我想计算剩余的“PQ”因子的斜率(若存在),即N0-N3;N1-N2。。。以此类推

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

df %>% 
   filter(N=="N0" | N=="N1") %>%
   group_by(PQ) %>% 
   mutate(slope = c(0, diff(Value)))
为了使它紧凑,当有多个元素时,我们可以在%中使用
%而不是
=

df %>%
   filter(N %in%  paste0("N", 0:1)) %>%
   group_by(PQ) %>%
   mutate(slope = c(0, diff(Value)))

关于第二个问题,关于对“N”中的所有组合执行此操作,请在“N”的
unique
元素上使用
combn
filter
根据组合值对“N”进行筛选,在按“PQ”分组后,计算“Value”的
diff
。输出将是我们指定的
simplify=FALSE
列表

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 )

diff
返回的元素比原始数据集少一个元素,因此您需要
c(0,diff(value))
来更正此问题。您好,我做了,但由于我没有“15信誉”,因此它不会更改状态:(抱歉
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 )