2016-05-13 9 views
0

私は6つの変数(x、y、E、freq、Perc、Rip)を持つデータフレームを持っています。3つの変数を設定するサブデータフレームの作成方法

library(dplyr) 
library(scales) 

a<-c(10,20,30,40,50,60,70,80,90,100) 
b<-c(15,25,35,45,55,65,75,85,95,105) 
x<-rep(a,3) 
y<-rep(b,3) 
E<-sample(30) 
freq<-as.character(rep(c(100,200,300),10)) 

Perc_Points<- percent(seq(0.9,0.1,by=-0.1)) 

data<-data.frame(x,y,freq,E) 

data1<-group_by(data,freq) 

N <- 10 
df <- vector("list", N) 

df <- lapply(1:N, function(i) 
       { lista <- sapply(seq(0.9, 0.1, -0.1), 
        function(pct) {sample_frac(data1, pct)}, 
        simplify=FALSE) 
        names(lista) <- Perc_Points 
        xxxx <- bind_rows(lista, .id = "Perc") 
        df[[i]] <- xxxx 
       }) 

df<-bind_rows(df, .id="Rip") 
df<-data.frame(df) 

は、今私はdfのサブデータフレーム、FREQ、Percのとリップのそれぞれ異なる値に1つで動作するようにしたいです。例えば

= 100 freq有するデータフレーム、Perc = 90%、Rip = 1、= 100 freqと別の、Perc = 90%、Rip = 2、等...

Iはgroup_by(df, Perc, freq, Rip)と試みますしかし、問題があります:このサブデータフレームのそれぞれにkrige関数を適用する必要があり、この関数はgrouped_dfでは機能しません。 どうすればいいですか?

答えて

2

我々はdplyrで作業する必要がある場合

はまた、使用lapplylist要素の上にsplit

lst <- split(df, list(df$Rip, df$Perc, df$freq), drop=TRUE) 

して、ループを使用して関数を適用することができますdo

df %>% 
    group_by(Rip, Perc, freq) %>% 
    do(data.frame(krigeFunc(arg1, arg2,..))) #not clear about the function 
+0

することができますリスト要素をループする方法を教えてください。私が適用しなければならない関数は次のとおりです。 'nearest = krige(E〜1、df、grid、nmax = 1)'、 ここでdfは毎回singolのサブデータフレームで、グリッドはこれです: 'x.range < - range(df $ x) y.range < - range(df $ y) グリッド< - expand.grid(x = seq(from = x.range [1]、to = x.range (グリッド)< - 〜x + y グリッド化された([2]、by = 1)、y = seq(from = y.range [1]、to = y.range [2]、by = 1)) グリッド)< - TRUE' – Lince202

+1

'lapply(lst、function(x)krigeFunc(x $ column name、arg1、....))' – akrun

関連する問題