如何创建设置3个变量的子数据帧

时间:2016-05-13 11:52:23

标签: r dplyr

我有一个包含6个变量的数据帧(x,y,E,freq,Perc,Rip)。

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和Rip值。

例如,数据框freq = 100,Perc = 90%,Rip = 1,另一个freq = 100,Perc = 90%,Rip = 2等......

我尝试使用group_by(df, Perc, freq, Rip),但是存在一个问题:我必须将krige函数应用于每个子数据帧,并且此函数不适用于grouped_df。 我怎么能这样做?

1 个答案:

答案 0 :(得分: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