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$car
或 list1[["car"]]
.
我想创建一系列数据框,这些数据框是基于特定因式分解列中的值的主数据框的子集。
下面是我的数据和代码:
>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$car
或 list1[["car"]]
.