我想基于特定因子列中的值创建一系列数据帧,这些数据帧是主数据帧的子集。
以下是我的数据和代码:
>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循环遍历级别列表并将级别名称粘贴到结果数据框名称中,并使用相同级别对子集的数据框内容的主数据框进行子集化
我可以手动写出单个子集语句,但想知道将来如何做这件事。
我有类似的代码用于循环遍历同一列以生成一系列直方图,但这让我很难过。
感谢您的帮助
答案 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$car
或list1[["car"]]
。