簡體   English   中英

在R中使用循環創建多個圖

[英]Creating multiple plots with a loop in R

我的數據在這里可用,看起來像這樣:

sq_id        total_forays_day age_at_loc date.x  
  <chr>            <dbl>      <dbl>      <chr>   
22897                1         41        17-06-18
22897                1         42        17-06-19
22897                2         43        17-06-20
22897                2         43        17-06-20
22897                1         44        17-06-21
22897                1         45        17-06-22

我想使用循環為89個唯一的sq_id plot(total_forays_day~age_at_loc)

我可以通過運行以下命令通過sq_id獲得唯一的圖:

plot(total_forays_day~age_at_loc, data=(data%>%filter(sq_id=="22641")), type="l")

但這不是一種有效的方法,因為我需要可視化89個圖。

我努力了:

par(mfrow=c(10,10))
for(i in 1:1) { #loop over loop.vector
    plot(total_forays_day~age_at_loc[,i], data=data)
}

這是行不通的。 我收到以下錯誤消息:

age_at_loc [,i]中的錯誤:維數不正確

我應該如何修復我的for循環代碼? 任何建議,將不勝感激!

預先嘗試:

# remove [1:3] when you are comfortable with this and want to see all of them
for (d in split(data, data$sq_id)[1:3]) {
  plot(total_forays_day ~ age_at_loc, data=d)
  readline("next") # or locator(1)
}

您遇到的問題:

  • total_forays_day~age_at_loc[,i]age_at_loc一個框架,但這是一個向量
  • total_forays_day~age_at_loc[i] (我錯誤地建議)正在將一個矢量與單個數字進行比較,該操作不起作用,因為plot期望所有矢量的長度都相同( age_at_loc[i]的長度為1)

您的問題是您沒有以有效的方式拆分數據。 如果您查看split(...)的結果,將會看到類似

str(split(data, data$sq_id)[1:3])
# List of 3
#  $ 22640:'data.frame':    102 obs. of  4 variables:
#   ..$ sq_id           : int [1:102] 22640 22640 22640 22640 22640 22640 22640 22640 22640 22640 ...
#   ..$ total_forays_day: int [1:102] 1 1 1 1 1 1 1 1 1 1 ...
#   ..$ age_at_loc      : int [1:102] 49 49 51 51 52 52 53 53 54 54 ...
#   ..$ date.x          : Factor w/ 124 levels "17-06-07","17-06-08",..: 2 2 3 3 4 4 5 5 6 6 ...
#  $ 22641:'data.frame':    52 obs. of  4 variables:
#   ..$ sq_id           : int [1:52] 22641 22641 22641 22641 22641 22641 22641 22641 22641 22641 ...
#   ..$ total_forays_day: int [1:52] 1 1 1 1 1 1 1 1 2 2 ...
#   ..$ age_at_loc      : int [1:52] 49 51 52 53 54 55 59 60 61 61 ...
#   ..$ date.x          : Factor w/ 124 levels "17-06-07","17-06-08",..: 2 3 4 5 6 7 8 9 10 10 ...
#  $ 22653:'data.frame':    35 obs. of  4 variables:
#   ..$ sq_id           : int [1:35] 22653 22653 22653 22653 22653 22653 22653 22653 22653 22653 ...
#   ..$ total_forays_day: int [1:35] 2 2 2 2 1 2 2 1 2 2 ...
#   ..$ age_at_loc      : int [1:35] 58 58 59 59 60 61 61 62 63 63 ...
#   ..$ date.x          : Factor w/ 124 levels "17-06-07","17-06-08",..: 10 10 11 11 12 13 13 14 15 15 ...

請注意,列表中的每個元素在其框架中如何具有相同的sq_id 因此split(...)[[1]]是一個具有102行的幀,所有這些行均為sq_id"22640" 通過使用for (d in split(data, data$id))迭代,循環中的每個通道都為d分配了這些單sq_id幀之一。

readlines("next")locator(1)的使用純粹是主觀的且具有用戶體驗。 如果您想按Enter鍵,請選擇第一個; 如果您想單擊圖像,請選擇第二個。

要知道,如果您要對拆分數據進行其他操作,則拆分一次並多次使用可能會有所幫助,

splitdata <- split(data, data$sq_id)
for (d in splitdata) { ... }

暫無
暫無

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

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