1

グループ化されたデータで線形フィッティングを実行しようとしています。

ただし、フィッティング全体にいくつかの条件を追加したいのですが、いくつかの条件をサブセット化したときにそれを行うことができませんでした。

set.seed(183)
library(dplyr)
V <- rep(seq(1,8),3)
value = c(c(sort(runif(5,0.001,1)),rep(0,3)),c(sort(runif(5,0.001,1)),rep(0,2),runif(1,0.001,1)),c(sort(runif(5,0.001,1)),rep(0,2),runif(1,0.001,1)))
group=rep(letters[1:3],each=8)

df <- data.frame(group,V,value)

#    > df
#   group V      value
#1      a 1 0.15087459
#2      a 2 0.35408406
#3      a 3 0.47339320
#4      a 4 0.67614665
#5      a 5 0.98273932
#6      a 6 0.00000000
#7      a 7 0.00000000
#8      a 8 0.00000000
#9      b 1 0.32821476
#10     b 2 0.35737009
#11     b 3 0.58821689
#12     b 4 0.81088053
#13     b 5 0.99122633
#14     b 6 0.00000000
#15     b 7 0.00000000
#16     b 8 0.03697432
#17     c 1 0.12940226
#18     c 2 0.41918905
#19     c 3 0.66020739
#20     c 4 0.84124155
#21     c 5 0.95052213
#22     c 6 0.00000000
#23     c 7 0.00000000
#24     c 8 0.15071444

各グループ内の私の条件は

1) 最後の 3value==0つがすべて適合する場合V>=4&V<=5

2) 最後の 2 つが のvalue>0場合にのみ適合する場合V>=7

これは、この操作を行うために私が書いた関数です

   get_slope <- function(df){
  if (tail(df$value,3)==0)
    slp = coef(lm(value~V, data=subset(df,V>=4&V<=5)))[2]
    else 
    if (any(tail(df$value,3)>=0))
        slp = coef(lm(value ~ V, data=subset(df,V>=7)))[2]
    return(slp)
  }

df_slope <- df%>%
  group_by(group)%>%
  do(.,slope=get_slope(df))

Warning messages:
1: In if (tail(df$value, 3) == 0) slp = coef(lm(value ~ V, data = subset(df,  :
  the condition has length > 1 and only the first element will be used
2: In if (tail(df$value, 3) == 0) slp = coef(lm(value ~ V, data = subset(df,  :
  the condition has length > 1 and only the first element will be used
3: In if (tail(df$value, 3) == 0) slp = coef(lm(value ~ V, data = subset(df,  :
  the condition has length > 1 and only the first element will be used

最後に、各グループの勾配値を取得したいと思います。

これを行う簡単な方法はありますか?

よろしくお願いします!

4

2 に答える 2