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 列,我将得到 100 个带有 26 条的图。

所以我需要每个文件,比如,

Cases  <- factor(x$Cases)

但是对于每个文件,然后为每个因子绘制 26 条图。

希望这很清楚。

感谢您的任何建议。

例如,对于我拥有的每个文件

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, CCC, DDD, EEE。我需要为每个文件绘制这些因子的每一列的平均值。

谢谢你的支持。

4

2 回答 2

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”(四组而不是五组)进行拆分,您可以执行以下操作:

# 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 回答
1

假设您已经正确设置了数据框,那么使用aggregate(或ddply来自plyr包)怎么样?这是一个带有这样一个数据框的玩具示例(您需要将其嵌入到循环中或编写自定义函数)。

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)

我不建议使用条形图来可视化您的数据:它们在显示数据的细微变化方面非常糟糕,并且数据墨水比率很差。在我看来,克利夫兰的点图或水平图可以完成这项工作。在后一种情况下,您甚至可以在单个页面上表示所有内容,这看起来像是“100 个绘图,其中包含 26 个小节”的一个非常好的替代方案。

于 2012-07-09T17:58:29.090 回答