簡體   English   中英

R中的子集數據幀使用循環

[英]subset data frame in R using loop

我有一個如下所示的數據框:

----------

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])
}

但那沒用。 有什么建議么? 謝謝。

可能是這樣的

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

看一下list2envsplit函數。 這里有一些使用虹膜數據集的例子。

兩種方式:

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]])
}

更新示例

相關文章

    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]])
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM