我有一个数据框,该框具有一个小时的累计能量值,跨整个月。我希望能够按日绘制累积能量的值。第一部分很简单:我将数据框除以定义日期的列,如下所示。我还可以手动提取所需的每一天的值,但无法使用for循环自动执行此过程。此问题描述如下。
#Divide the data.frame into a list of data.frames
#The column of the dataframe "vjk" which defines the date is called "Generated on" so that works for me
> daysvjk = split(vjkdata, f = vjkdata$`Generated On`)
#Let's now define a vector to hold the sums of daily values
> dailyvaluesvjk <- vector(length = 30)
#I can access an individual value
> dailyvaluesvjk[1] <- sum(daysvjk[[i]]$'Power Generated'
##but trying to automate this process gives only "FALSE"
> for(i in 1:30) {dailyvaluesvjk[i] = sum(daysvjk[[i]]$'Power Generated' )}
答案 0 :(得分:0)
我认为在dailyvaluesvjk[i] = sum(daysvjk[[i]]
中您拥有=
而不是<-
?
我收回了。我无法重现该问题。
让我们生成一些数据-价值六天,前四天有两个条目:
library("tidyverse")
set.seed(0)
dd <- data.frame(
days=c(
seq.Date(as.Date('2018-01-01'), as.Date('2018-01-6'), by = '1 day'),
seq.Date(as.Date('2018-01-01'), as.Date('2018-01-4'), by = '1 day')),
powerGenerated=round(runif(10, 5, 10)))
dd <- arrange(dd, days)
(我必须假设这是您在谈论的那种数据。请提供示例数据以提出一个很好的问题。)
> dd
days powerGenerated
1 2018-01-01 9
2 2018-01-01 9
3 2018-01-02 6
4 2018-01-02 10
5 2018-01-03 7
6 2018-01-03 8
7 2018-01-04 8
8 2018-01-04 8
9 2018-01-05 10
10 2018-01-06 6
拆分到列表中,并创建矢量来保存总和:
daysvjk <- split(dd, f=dd$days)
dailyvaluesvjk <- vector(length=length(daysvjk))
将总和放入一个循环中,并使用=
进行分配:
for (i in 1:length(dailyvaluesvjk)) {
dailyvaluesvjk[i] = sum(daysvjk[[i]]$powerGenerated)
}
我还可以:
> dailyvaluesvjk
[1] 18 16 15 16 10 6
确定要正确复制代码吗? FALSE
让我想也许您有dailyvaluesvjk[i] == sum(daysvjk[[i]]$'Power Generated' )
,并使用==
?
否则,请确保它仍在发生,提供一些示例数据以及输出应为什么,也许我们可以再尝试一次。
(另外两个注意事项:还有更多类似R的方法(和更简单的方法),我可以从tidyverse中查看summarise
。此外,如果需要预先分配向量以提高性能,将mode="numeric"
放在其中,否则首先分配一个布尔向量。)
答案 1 :(得分:0)
我无法重现您的错误。您应该使用dput(vjkdata)
使贡献者更容易。
最好重命名您的字段,以便没有空格。并且您应该检查汇总。
aggregate(Power_Generated ~ days, data = DF, FUN = sum)
以下是我使用的数据以及为重现您的错误所做的操作:
set.seed(1)
DF <- data.frame(days = seq.Date(as.Date('2018-01-01'), as.Date('2018-02-01'), by = '1 day'),
Power_Generated = runif(32, 5, 10))
daysvjk <- split(DF, DF$days)
valuesVJK <- vector(length =32 )
#works
sum(daysvjk[[1]]$Power_Generated)
#works
for(i in 1:32) {valuesVJK[i] = sum(daysvjk[[i]]$Power_Generated )}
valuesVJK