Group (factorial) data with multiple factors. error: incompatible size (0), expecting 1 (the group size) or 1
Group (factorial) data with multiple factors. error: incompatible size (0), expecting 1 (the group size) or 1
此 post 是
的后续
我想按 "PQ" 对数据(下面)进行分组,但是我收到以下错误:
"incompatible size (0), expecting 1 (the group size) or 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)
传递错误的代码
#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 ... 等等
错误是由于 diff
的输出与原始数据集的长度不同造成的。它returns比原始数据少了一个元素。所以附加 0 或 NA 将解决问题
df %>%
filter(N=="N0" | N=="N1") %>%
group_by(PQ) %>%
mutate(slope = c(0, diff(Value)))
为了紧凑,当有多个元素时,我们可以使用%in%
代替==
df %>%
filter(N %in% paste0("N", 0:1)) %>%
group_by(PQ) %>%
mutate(slope = c(0, diff(Value)))
关于第二个问题,关于对'N'中的所有组合执行此操作,在'N'、[=18=的unique
个元素上使用combn
] 'N'根据组合值,按'PQ'分组后,计算'Value'的diff
。输出将是我们指定的 list
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 )
此 post 是
我想按 "PQ" 对数据(下面)进行分组,但是我收到以下错误:
"incompatible size (0), expecting 1 (the group size) or 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)
传递错误的代码
#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 ... 等等
错误是由于 diff
的输出与原始数据集的长度不同造成的。它returns比原始数据少了一个元素。所以附加 0 或 NA 将解决问题
df %>%
filter(N=="N0" | N=="N1") %>%
group_by(PQ) %>%
mutate(slope = c(0, diff(Value)))
为了紧凑,当有多个元素时,我们可以使用%in%
代替==
df %>%
filter(N %in% paste0("N", 0:1)) %>%
group_by(PQ) %>%
mutate(slope = c(0, diff(Value)))
关于第二个问题,关于对'N'中的所有组合执行此操作,在'N'、[=18=的unique
个元素上使用combn
] 'N'根据组合值,按'PQ'分组后,计算'Value'的diff
。输出将是我们指定的 list
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 )