【问题标题】:Subset dataframe using a loop使用循环子集数据帧
【发布时间】:2013-11-21 19:44:01
【问题描述】:

我有一个如下所示的数据框:

index   ID   date              Amount
2       1001 2010-06-08         0
21      1001 2010-10-08        10
6       1002 2010-08-16        30
5       1002 2010-11-25        20
9       1003 2010-01-01         0
8       1003 2011-03-06        10
12      1004 2012-03-12        10
11      1004 2012-06-21        10
15      1005 2010-01-01        30
13      1005 2010-04-06        20

我想对这些数据进行子集化,以便我有新的数据帧,每个 ID 一个,像这样

index   ID   date              Amount
2       1001 2010-06-08         0
21      1001 2010-10-08        10

6       1002 2010-08-16        30
5       1002 2010-11-25        20

等等。

我不需要保存新的数据框,而是用它来执行一些基本的计算。此外,我想在包含超过 10000 个 ID 的整个表上执行此操作,因此需要循环。我试过这个

    temp <- data.frame(Numb=c(),Dt=c(),Amt=c())
for (i in seq_along(stNew$ID)){
   temp[i,] <- subset(stNew, stNew[i,]==stNew$ID[i])
}

但这没有用。有什么建议吗?

【问题讨论】:

  • 您好,欢迎来到 SO!我自发的建议是,您应该尝试搜索 SO(和其他地方)寻找答案。在数据框中为每个组执行某些操作是 SO 上最常见的问题之一,您肯定会找到一些可以适应您自己的数据的好答案。 Thisthis 可以帮助您入门。干杯。
  • Henrik - 谢谢。事实上,我确实搜索并找到了一对非常有用的。也感谢您的链接。
  • 太棒了!因此,无需拆分或子集您的数据框。

标签: r dataframe subset


【解决方案1】:

看看list2envsplit 函数。在此提供一些使用 iris 数据集的示例。

两种方式:

list_df <- split(iris, iris$Species) #split the dataset into a list of datasets based on the value of iris$Species
list2env(list_DF, envir= .GlobalEnv) #split the list into separate datasets

一种方式:

list2env(split(iris, iris$Species), envir = .GlobalEnv)

或者您可以使用for 循环为新数据集分配自定义名称:

iris_split <- split(iris, iris$Species)
new_names <- c("one", "two", "three")
for (i in 1:length(iris_split)) {
  assign(new_names[i], iris_split[[i]])
}

示例更新

Related post

【讨论】:

    【解决方案2】:
        iris_split <- split(iris, iris$Species)
    

    您可以动态分配 data.frame 名称

        new_names <- as.character(unique(iris$Species))
    
        for (i in 1:length(iris_split)) {
        assign(new_names[i], iris_split[[i]])
        }
    

    【讨论】:

      【解决方案3】:

      可能是这样的

          IDs<-unique(df$ID)
          for (i in 1:length(IDs)){ 
          temp <- df[df$ID==IDs[i],]
          #more things to do with temp
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-03
        • 1970-01-01
        • 2021-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多