这个帖子是Changing line color in ggplot based on "several factors" slope的后续文章
我想按"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)传递错误的代码
#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 .诸若此类
发布于 2016-08-19 10:12:41
此错误是由于与原始数据集相关的diff输出的长度不同造成的。它返回的元素比原始数据少一个。因此,添加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’的unique元素上使用unique,根据组合值对'N‘进行filter,在按'PQ’分组之后,计算‘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 )https://stackoverflow.com/questions/39036198
复制相似问题