图表,我已经失败了。 挑战在于我有_exact_same_code_用于绘制多个数据集(而不是一个LARGE数据集的子集),但我似乎无法正确地使用循环代码来正确替换$。
格式的数据集,df1,df2,df3 ......:
OBSDATE REGION AVG_RESP P10 P90
2012-02-01 APAC 1.276 0.78 3.45
2012-02-01 EMEA 2.341 1.23 5.67
2012-02-02 APAC 1.343 0.89 3.21
2012-02-02 EMEA 2.473 1.37 5.98
图表更复杂,但是像这样:
avgMx <- quantile(df1$P90,0.95)
ggplot(df1,aes(x=OBSDATE,y=AVG_RESP))+coord_cartesian(ylim=c(0,avgMx))+geom_ribbon(aes(ymin=P10,ymax=P90),fill="gray60",alpha=0.33)+geom_line(aes(x=OBSDATE,y=AVG_RESP),color="#007DB1",size=0.5)+facet_wrap(~REGION)
如果我用数据集名称定义一个向量或列表(两者似乎都失败了相同的错误消息)我无法让循环工作以找到任何描述性值(如上面的分位数甚至是最大值! )
filenames <- c("df1","df2","df3")
我想得到这样的东西
for (i in filenames) {
quantile(i$AVG_RESP,0.95)
max(i$AVG_RESP)
}
但我得到的错误是$对原子矢量无效。经过调查,这似乎没有产生任何可用的结果。
所以,我可以让它发挥作用:
max(df1$AVG_RESP) or max(df1['AVG_RESP'])
他们都会从上面输出2.473。但是,这不会飞:
for (i in pagesC) max(i['AVG_RESP'])
它什么都不做。将其更改为:
for (i in pagesC) print(max(i['AVG_RESP']))
提供NA的实例。
我完全卡住了。任何帮助都会非常感激!
编辑:我修复了导致错误的数据 - 现在应该可以重现。
答案 0 :(得分:3)
您的代码不可重复,因此这是我对您想要的最佳猜测:
df1 <- df2 <- df3 <- read.table(text="OBSDATE REGION AVG_RESP P10 P90
2012-02-01 APAC 1.276 0.78 3.45
2012-02-01 EMEA 2.341 1.23 5.67
2012-02-02 APAC 1.343 0.89 3.21
2012-02-02 EMEA 2.473 1.37 5.98
2012-02-01 APAC 1.276 0.78 3.45
2012-02-01 EMEA 2.341 1.23 5.67
2012-02-02 APAC 1.343 0.89 3.21
2012-02-02 EMEA 2.473 1.37 5.98
2012-02-01 APAC 1.276 0.78 3.45
2012-02-01 EMEA 2.341 1.23 5.67
2012-02-02 APAC 1.343 0.89 3.21
2012-02-02 EMEA 2.473 1.37 5.98", header=TRUE)
info <- function(dataframe){
c(quantile(dataframe$AVG_RESP,0.95), max(dataframe$AVG_RESP))
}
LIST <- list(df1, df2, df3)
lapply(LIST, info)
#Or you may want to use sapply if you want it to return a matrix
sapply(LIST, info)
R可以使用循环,但这实际上不是R的做法。
答案 1 :(得分:3)
i
是一个字符串;你想要具有i
中所有名称的对象。这是get()
函数。 (未经测试,因为你提供的是不可重复的。)
for (filename in filenames) {
i <- get(filename)
quantile(i$AVG_RESP,0.95)
max(i$AVG_RESP)
}
但这可能不是解决问题的最佳方法。将所有数据框放在列表中并使用lapply
循环遍历该列表可能是更好的方法(Tyler在他的回答中描述)。此外,如果这些是您拥有的更大的单一数据框的子集,那么更好的方法是使用plyr
包中的某些内容来定义如何拆分大数据框和什么与每个部分有关。