【问题标题】:Create a function which will make a list of dataframes through subsetting a dataframe in R创建一个函数,该函数将通过对 R 中的数据框进行子集化来制作数据框列表
【发布时间】:2017-07-29 20:03:06
【问题描述】:

我正在尝试编写一个函数,根据不同的时间长度(月数)为我设置一个数据帧的子集;并创建一个新数据帧列表,这些数据帧都是略有不同的子集。我希望能够将此功能应用于任何数据。

这是我正在尝试做的一个示例。

month <- c(0:35)
product<- c(112:147)
index <- rnorm(36)
originaldata <- data.frame(month, product, index)

sset <-  function(df, time, length, windows) {

  #Create the subset rule
  subfun <- function(x,y,z) {  x[x[[y]] >= z & x[[y]] <= z+length-1,] }

  #Apply this rule to dataframe 
  regdfs <- lapply(1:windows, 
    function(j) {subfun(x = df, y = time, z = j - 1) }) 
  }

#Apply sset function to create dataframe subsets
camsets <- sset(df = originaldata, time = originaldata$month, length = 13, windows = 24)

当我运行此代码时,我会收到各种错误消息。

这是我原始问题的链接,得到了有用的回答(感谢 Carl)Create a list of a list of dataframes, by subsetting a list of dataframes in R .这次我正在尝试编写一个函数来执行此操作,而且我可能正在做一些愚蠢的事情。

非常感谢任何帮助,谢谢。

【问题讨论】:

  • 如果您扩展了“各种错误消息”,将会有所帮助。
  • 很抱歉。最新的错误消息是 Error in .subset2(x, i, exact = exact) : attempt to select less than one element in integerOneIndex 。感谢您的帮助。
  • 首先,x[[y]] 只能检索 data.frame 的单列,但是您在 y 中传递了一个向量;也许你的意思是x[y,]?其次,y 是从 0 开始的,但是 R 中的向量是从 1 开始的,所以你很可能得不到你想要的。
  • 效果很好,非常感谢。
  • 更新:我现在收到错误消息 In Ops.factor(left, right) : ‘&lt;=’ not meaningful for factors 。有任何想法吗?谢谢。

标签: r list dataframe subset lapply


【解决方案1】:

按照 waterling 的建议使用拆分

month <- c(0:35)
product <- c(112:147)
index <- rnorm(36)
originaldata <- data.frame(month, product, index)

createsubsets <- function(df, length, windows) {
  cutoffs <-seq(0,windows*length,length)
  originaldata$group <- cut(originaldata$month, cutoffs,include.lowest=TRUE )
  split(originaldata, originaldata$group)
}

camsets <- createsubsets(df, 13, 24)

【讨论】:

    猜你喜欢
    • 2017-07-21
    • 1970-01-01
    • 2016-07-02
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多