0

私はこのように読んでいる別のcsvファイルを持っています:

files <- list.files("D:/...", pattern = "L01")
for (x in files) {
  (assign(x, read.csv(x, head=TRUE,, sep=",", skip= 92)))
}

次に達成したいのは、「ケース」という名前の列に従ってファイルを分割(係数を割り当てる)し、これらの「ケース」ごとに、棒グラフの残りの列のすべての平均値をプロットすることです。したがって、最後に、2つのファイル、50の因子、および26の列がある場合、26のバーを含む100のプロットが得られます。

したがって、ファイルごとに次のようなものが必要になります。

Cases  <- factor(x$Cases)

ただし、ファイルごとに、次に26バーの各要素に対して1つのプロット。

これが明確であることを願っています。

提案をありがとう。

たとえば、私が持っているファイルごとに

AAA  col1   col2  col3   ....  
AAA             
BBB  
BBB         
CCC  
CCC    
DDD  
DDD    
EEE  
EEE    
AAA  
AAA     
BBB  
BBB      
CCC  
CCC    
DDD  
DDD    
EEE  
EEE    

したがって、AAA要因は、、、、、BBBです。各ファイルについて、これらの係数の各列の平均をプロットする必要があります。CCCDDDEEE

サポートに感謝します。

4

2 に答える 2

1

データフレームがすでに正しく設定されていると仮定して、aggregate(またはplyrパッケージddplyから)使用するのはどうですか?これは、そのようなデータフレームの1つを使用したおもちゃの例です(これをループに埋め込むか、カスタム関数を作成する必要があります)。

L01_001 <- data.frame(Cases=gl(5, 2, 5*2*2, labels=c("AAA","BBB","CCC","DDD","EEE")), 
                      replicate(3, rnorm(5*2*2)))
mean.by.case <- with(L01_001, aggregate(L01_001[,-1], list(Cases=Cases), mean))
## opar <- par(mfrow=c(nlevels(L01_001$Cases), 1))
## apply(mean.by.case[,-1], 1, function(x) barplot(x))
## par(opar)
library(lattice)
barchart(~ X1 + X2 + X3 | Cases, mean.by.case)

データを視覚化するために棒グラフを使用することはお勧めしません。棒グラフは、データの微妙な変化を示すのが非常に悪く、データインクの比率が低くなっています。私の意見では、クリーブランドのドットプロットまたはレベルプロットがその役目を果たします。後者の場合、すべてを1ページに表示することもできます。これは、「26バーを含む100プロット」の代わりにかなり適切に聞こえます。

于 2012-07-09T17:58:29.090 に答える
1

あなたの質問はあまり明確に表現されていませんが、このような何かがあなたを始めるかもしれません:

# First, some sample data
set.seed(1)
df = data.frame(Cases = sample(LETTERS[1:5], 20, replace=TRUE),
                Set1 = sample(4:10, 20, replace=TRUE),
                Set2 = sample(6:19, 20, replace=TRUE),
                Set3 = sample(1:20, 20, replace=TRUE),
                Set4 = sample(5:16, 20, replace=TRUE))

# Use aggregate to find means by group
temp = aggregate(df[-1], by=list(df$Cases), mean)

# Plot
# par(mfrow=c(2, 2)) # Just for demonstration; used for the attached image
lapply(temp[-1], barplot, names.arg = temp$Group.1)
dev.off() # Reset the graphics device if you've changed par.

これにより、次のようなものが得られます。

ここに画像の説明を入力してください

アップデート

あなたの質問をもう一度読んだ後、私はあなたがあなたのグループ化をどのようにしたいかを誤解したと思います。次の使用法はapply、列ではなく行でプロットします。

par(mfrow=c(2, 3)) # Just for demonstration 
apply(temp[-1], 1, barplot)
dev.off() # Reset the graphics device

ここに画像の説明を入力してください

更新[コメントのいくつかの質問に答えるために]

いくつかの因子を組み合わせたい場合は、分割する前に新しい因子変数を作成することをお勧めします。したがって、たとえば、「A + B」、「C」、「D」、および「E」(5つではなく4つのグループ)で分割する場合は、次のようにすることができます。

# Create a new factor variable
df$Cases_2 = df$Cases # So you don't overwrite your original data
levels(df$Cases_2) <- ifelse(levels(df$Cases_2) %in% c("A","B"),
                             "AB", levels(df$Cases_2))
# Proceed almost as before
temp = aggregate(df[-c(1, 6)], by=list(df$Cases_2), mean)
apply(temp[-1], 1, barplot)
于 2012-07-09T18:22:47.970 に答える