0

CSV ファイルからデータを読み込んでレーダー チャートをプロットしようとしています。このデータは、5 行ごとに特定の列からデータを読み込んでレーダー チャートをプロットするように配置されています。

特定の列の読み取り (たとえば、次の例では最初の 5 行) に基づいてレーダー チャートをプロットするコードがあります。5 行のデータが読み込まれるたびにレーダー チャートがプロットされるように、自動化 (for ループを作成) するにはどうすればよいですか?

私の現在のコードは次のとおりです。

require(fmsb)
range <- c(0, 2)
id5 <- c(exceldata$excelcolumn[1:5])
id5.df <- data.frame(rbind(max=range[2], min=range[1], id5)
radarchart(id5.df ...)

[1:5] は、レーダーチャートをプロットする前に読み込む最初の 5 行の手動仕様です。これを for ループに変更して、5 行ごとにレーダー チャートをプロットするにはどうすればよいですか?

ありがとう!

4

1 に答える 1

0

これを行う古典的な方法の 1 つは、data.frame の行のシーケンスを巧妙なインデックスで分割することです。これはうまくいくはずです。

ll <- split(seq(nrow(exceldata)),cumsum(seq(nrow(exceldata))%%5==1))
lapply(ll,function(x){
        id5 <- c(exceldata$excelcolumn[x])
        id5.df <- data.frame(rbind(max=range[2], min=range[1], id5)
        radarchart(id5.df,...)
}

たとえば、再現可能な例でこれをテストします。20 行の data.frame を作成し、5 行ごとにレーダーチャートを作成します。

set.seed(123)
N <- 20
dat <- data.frame(
  total=runif(N, 1, 5),
  phys=rnorm(N, 10, 2),
  psycho=sample(c(0.5, NA, 3),N,rep=TRUE),
  social=runif(N, 1, 5),
  env=sample(c(5, 2.5, 4),N,rep=TRUE))

ll <- split(seq(nrow(dat)),cumsum(seq(nrow(dat))%%5==1))
op <- par(mar=c(1, 2, 2, 1),mfrow=c(2, 2))

lapply(ll,
       function(x)radarchart(dat[x,]))
par(op)

ここに画像の説明を入力

于 2013-06-18T02:58:30.227 に答える