R如何使用for循环通过列对数据帧进行子集化

R How to subset a dataframe with a for loop through a column

我想创建一系列数据框,这些数据框是基于特定因式分解列中的值的主数据框的子集。

下面是我的数据和代码:

>max_value_found

   Group  Mileage    HiLo 
1  car        808    Hi     
2  train   162993    Lo 
3  car      19386    Hi     
4  walk       231    Lo 



>levels(max_value_found$group)

[1] "car"       "train"     "bike"      "walk"

>for(i in levels(max_value_found$group))
+{  x=paste(i,"_max_value",sep="")
+   x
+   x <-subset(max_value_found, max_value_found$group==i)
+}

>car_max_value

Error: object 'car_max_value' not found

我没有收到错误,但我也没有收到任何新的数据帧,据我所知,使用 ls()。

我想要做的是让 R 循环遍历级别列表并将级别名称粘贴到生成的数据框名称中,并使用同一级别为子集的数据框内容对主数据框进行子集化。

我本可以手动写出各个子集语句,但想知道将来如何做。

我有类似的代码用于循环遍历同一列以生成一系列直方图,但这让我很困惑。

感谢您的帮助

正如大卫在评论中指出的那样:

max_value_found <- data.frame(Group = c("car", "train", "car", "walk"),
                              Mileage = c(808, 162993, 19386, 231), 
                              HiLo = c("Hi", "Lo", "Hi", "Lo")) 


> list1 <- split(max_value_found, max_value_found$Group)
> list1 
$car   
Group Mileage HiLo 
1   car     808   Hi 
3   car   19386   Hi

$train   
Group Mileage HiLo 
2 train  162993   Lo

$walk   
Group Mileage HiLo 
4  walk     231   Lo

编辑:再次使用 David 的代码将这些释放到全局环境中:

> list2env(list1, .GlobalEnv)
<environment: R_GlobalEnv>
> ls()
[1] "car"             "list1"           "max_value_found" "train"          
[5] "walk"           
> str(car)
'data.frame':   2 obs. of  3 variables:
 $ Group  : Factor w/ 3 levels "car","train",..: 1 1
 $ Mileage: num  808 19386
 $ HiLo   : Factor w/ 2 levels "Hi","Lo": 1 1
> str(train)
'data.frame':   1 obs. of  3 variables:
 $ Group  : Factor w/ 3 levels "car","train",..: 2
 $ Mileage: num 162993
 $ HiLo   : Factor w/ 2 levels "Hi","Lo": 2
> car
  Group Mileage HiLo
1   car     808   Hi
3   car   19386   Hi
> train
  Group Mileage HiLo
2 train  162993   Lo

不过我认为这不是一个好举措。您最好从列表中访问数据帧,即 list1$carlist1[["car"]].