Я новичок в R, поэтому я не уверен, что аналогичный вопрос уже задан, но поиск не дал мне ответа, который мне нужен.Сравнение значений в одном и том же положении двух одинаковых данных.frames в R
Имея два вида данных. Кадры с таким же количеством столбцов (321) и строк (281), упорядоченными по широте и долготе. DF1 («Лендер») содержит немецкие государства в качестве символов. Это выглядит так:
lat\lon ... 8.70 8.75 8.80 ...
...
51.30 Hessen Hessen Hessen
51.25 NRWestfalen Hessen Hessen
51.20 NRWestfalen NRWestfalen Hessen
51.15 NRWestfalen Hessen Hessen
...
DF2 ("df") содержит значения, упорядоченные одинаково. У меня разные DF2 для каждого часа года, и мне нужно получить средние значения для каждого немецкого государства. Она работает следующим образом:
Laender <- read.csv("path/file.csv", row.names = 1, check.names = F)
df <- read.csv("path/file1.csv", row.names = 1, check.names = F)
# XXtot <- 0 creating the needed variables
for(i in 1:321){
for(j in 1:281){
BYtot <- ifelse(Laender[i,j]=="Bayern", BYtot + df[i,j], BYtot)
SDtot <- ifelse(Laender[i,j]=="Saarland", SDtot + df[i,j], SDtot)
BWtot <- ifelse(Laender[i,j]=="BadenW", BWtot + df[i,j], BWtot)
STtot <- ifelse(Laender[i,j]=="SAnhalt", STtot + df[i,j], STtot)
SNtot <- ifelse(Laender[i,j]=="Sachsen", SNtot + df[i,j], SNtot)
MVtot <- ifelse(Laender[i,j]=="MVorpommern", MVtot + df[i,j], MVtot)
NRWtot <- ifelse(Laender[i,j]=="NRWestfalen", NRWtot + df[i,j], NRWtot)
BEtot <- ifelse(Laender[i,j]=="Berlin", BEtot + df[i,j], BEtot)
HHtot <- ifelse(Laender[i,j]=="Hamburg", HHtot + df[i,j], HHtot)
HBtot <- ifelse(Laender[i,j]=="Bremen", HBtot + df[i,j], HBtot)
SHtot <- ifelse(Laender[i,j]=="SHolstein", SHtot + df[i,j], SHtot)
NStot <- ifelse(Laender[i,j]=="Niedersachsen", NStot + df[i,j], NStot)
HEtot <- ifelse(Laender[i,j]=="Hessen", HEtot + df[i,j], HEtot)
THtot <- ifelse(Laender[i,j]=="Thueringen", THtot + df[i,j], THtot)
RPtot <- ifelse(Laender[i,j]=="RPfalz", RPtot + df[i,j], RPtot)
BRtot <- ifelse(Laender[i,j]=="Brandenburg", BRtot + df[i,j], BRtot)
}
}
Это даст мне суммарные значения для каждого немецкого государства, и я могу вычислить среднее значение после этого, но это занимает слишком много времени, так как я должен сделать процедуру со всеми 8760 версий DF2.
Надеюсь, есть более простой и быстрый способ сделать это.
Можете ли вы предоставить дополнительную информацию о содержимом этих DF2? Может быть, показать результат 'str (DF2)' для одного из них? – ulfelder
Если ваши 'dfs' имеют одинаковую длину, вы можете запускать множество строк за строкой [сравнения] (http://www.cookbook-r.com/Manipulating_data/Comparing_data_frames/). Кажется, что на ваши вопросы есть два элемента, один из которых касается эффективного способа сравнения кадров данных, а другой - эффективного способа получения сводной статистики. Предположительно, было бы целесообразно использовать 'dplyr' или' aggregate' для более эффективного получения некоторых желаемых мер, но это трудно сказать, не глядя на образец данных и воспроизводимый пример. – Konrad
DF2s выглядят точно так же, как «Laender», но имеют числовые значения вместо символов: 'data.frame': \t 321 obs.из 281 переменных: $ V30: int 0 1 1 7 5 5 0 0 0 0 ... $ V31: int 0 2 2 3 5 2 1 0 0 0 ... $ V32: int 0 1 1 3 2 2 1 0 0 0 ... $ V33: int 0 1 1 3 4 4 1 0 0 0 ... $ V34: int 0 1 0 0 4 4 2 0 0 0 ... $ V35: int 0 0 0 0 24 24 1 0 0 0 ... $ V36: int 0 0 0 0 30 30 1 0 0 0 ... $ V37: int 0 0 0 0 30 8 0 0 0 0 ... $ V38: int 0 0 0 0 8 5 9 0 0 0 ... $ V39: int 0 1 0 0 5 5 10 0 0 0 ... $ V40: int 0 0 0 0 3 10 10 0 0 0. .. ... – brnwa