在二维数据帧中访问/索引

时间:2019-06-10 19:30:35

标签: r dataframe

我有一个数据框,该框具有一个小时的累计能量值,跨整个月。我希望能够按日绘制累积能量的值。第一部分很简单:我将数据框除以定义日期的列,如下所示。我还可以手动提取所需的每一天的值,但无法使用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' )}

2 个答案:

答案 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