簡體   English   中英

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遍歷級別列表,然后將級別名稱粘貼到結果數據框名稱中,並使用同一級別將主數據框作為子集數據框內容的子集。

我本可以手動寫出各個子集語句,但是想知道將來如何做。

我有類似的代碼用於遍歷同一列以生成一系列直方圖,但這讓我很困惑。

謝謝你的幫助

正如David在評論中指出的那樣:

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"]]訪問數據幀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM