Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用循环的子集数据帧_R_Dataframe_Subset - Fatal编程技术网

R 使用循环的子集数据帧

R 使用循环的子集数据帧,r,dataframe,subset,R,Dataframe,Subset,我有一个如下所示的数据框: 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

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

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

等等

我不需要保存新的数据帧,而是使用它来执行一些基本的计算。我还想在包含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])
}
temp可能是这样的

    IDs<-unique(df$ID)
    for (i in 1:length(IDs)){ 
    temp <- df[df$ID==IDs[i],]
    #more things to do with temp
    }
IDs查看and函数。下面是使用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
或者,您可以使用
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\u split
iris\u split大家好,欢迎来到SO!我自发的建议是,你应该试着寻找答案。在一个数据框架中对每个组执行某些操作是最常见的问题之一,您肯定会找到一些适合您自己的数据的好答案。也许能让你开始。干杯,亨里克-谢谢。事实上,我搜索了一下,找到了一对非常有用的夫妇。谢谢你的链接。太好了!因此,无需拆分或子集数据帧。
list2env(split(iris, iris$Species), envir = .GlobalEnv)
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)
    new_names <- as.character(unique(iris$Species))

    for (i in 1:length(iris_split)) {
    assign(new_names[i], iris_split[[i]])
    }