基于特定条件的数据帧分割

时间:2016-03-07 06:36:33

标签: r dataframe

考虑具有1200条记录和30个变量的数据框。 我想将数据帧分成六个样本,每个样本大小为200。 到目前为止,我尝试使用以下R代码:

[
    "ECDHE-RSA-AES256-SHA384",
    "DHE-RSA-AES256-SHA384",
    "ECDHE-RSA-AES256-SHA256",
    "DHE-RSA-AES256-SHA256",
    "ECDHE-RSA-AES128-SHA256",
    "DHE-RSA-AES128-SHA256",
    "HIGH",
    "!aNULL",
    "!eNULL",
    "!EXPORT",
    "!DES",
    "!RC4",
    "!MD5",
    "!PSK",
    "!SRP",
    "!CAMELLIA"
]

以上代码结果带有未绑定错误,因为我无法访问具有0索引值的第一个记录,而是在R中我们可以访问索引值为1的第一个记录。

createSample<-function(df)
{
 totalSample<-ceiling((nrow(df)/200))
 sampleSize=200
  for(i in 1:totalSample)
   {
        ## user should have to define file name and start & end row
        file <-'demo.csv'
        start <- (i-1)*sampleSize
        end <- (i*sampleSize)
        function1(file,start,end)    ## this will call to another function then again control reaches here
        }
     }
createSample(rawData) ## function call

1 个答案:

答案 0 :(得分:1)

由于我们不知道OP的帖子中提到的第二个功能,我们可以跳过该部分,而是将数据集拆分为list data.frame个每n行(即200行)。如果数据集的list不是n的倍数,则最后nrow元素将具有剩余行。

createSample <- function(df, n, Sample=FALSE){
   SeqN <- seq_len(nrow(df))
   g1 <- (SeqN-1)%/%n +1
   Start <- unname(tapply(SeqN, g1, head, 1))
   End <- unname(tapply(SeqN, g1, tail, 1))
   if(Sample){
   g1 <- sample(g1)
   }
   list(Splitdat=lapply(split(SeqN, g1), function(i) df[i,]),
        Start=Start,
        End=End)
 }

createSample(yourdat, 200)
createSample(yourdat, 200, TRUE)

注意:添加了一个随机sample函数中观察结果的选项。