2016-05-13 74 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子dataframes,一個是頻率,打擊樂和瑞普的每個不同價值的工作。

例如,freq = 100一個數據幀,Perc = 90%,Rip = 1,另一個與freq = 100,Perc = 90%,Rip = 2,等等...

我嘗試用group_by(df, Perc, freq, Rip) ,但有一個問題:我必須將krige函數應用於每個子數據框,並且此函數不適用於grouped_df。 我該怎麼做?

回答

2

我們可以使用split

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

,然後遍歷所有的list元素與lapply和應用功能

或者,如果我們需要dplyr工作,使用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) grid < - expand.grid(x = seq(from = x.range [1],to = x.range (網格)< - 〜x + y 網格化(2),= 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

相關問題