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

时间:2015-02-08 20:32:54

标签: r for-loop dataframe

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

以下是我的数据和代码:

>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循环遍历级别列表并将级别名称粘贴到结果数据框名称中,并使用相同级别对子集的数据框内容的主数据框进行子集化

我可以手动写出单个子集语句,但想知道将来如何做这件事。

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

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

大卫在评论中指出:

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"]]