У меня есть нулевой фрейм данных, который представляет промежуток времени для выбора городов и три результата теста:
cities <- c('Boston', 'Chicago', 'Denver', 'HOuston', 'LosAngeles', 'Miami', 'NewYork', 'WashingtonDC')
years <- 2014:2018
df <- expand.grid(Year=years, City=cities, TestA=0, TestB=0, TestC=0)
df[with(df, order(Year, City)),]
head(df,12)
# Year City TestA TestB TestC
#1 2014 Boston 0 0 0
#2 2015 Boston 0 0 0
#3 2016 Boston 0 0 0
#4 2017 Boston 0 0 0
#5 2018 Boston 0 0 0
#6 2014 Chicago 0 0 0
#7 2015 Chicago 0 0 0
#8 2016 Chicago 0 0 0
#9 2017 Chicago 0 0 0
#10 2018 Chicago 0 0 0
#11 2014 Denver 0 0 0
#12 2015 Denver 0 0 0
Я хочу обновить его, используя второй фрейм данных, который выглядит следующим образом:
dfUpdate <- data.frame(Year=c(2016, 2015), City=c('Boston', 'Chicago'),
TestA=c(12.23, 16.01), TestB=c('Joe', 'Sally'), TestC=c(1000, 1500) )
dfUpdate
# Year City TestA TestB TestC
#1 2016 Boston 12.23 Joe 1000
#2 2015 Chicago 16.01 Sally 1500
После обновления исходный фрейм данных должен выглядеть следующим образом:
# Year City TestA TestB TestC
# 1 2014 Boston 0 0 0
# 2 2015 Boston 0 0 0
# 3 2016 Boston 12.23 Joe 1000
# 4 2017 Boston 0 0 0
# 5 2018 Boston 0 0 0
# 6 2014 Chicago 0 0 0
# 7 2015 Chicago 16.01 Sally 1500
# 8 2016 Chicago 0 0 0
# 9 2017 Chicago 0 0 0
# 10 2018 Chicago 0 0 0
# ...
Обновления всегда будут иметь значения года и города, которые указаны в 'df'.Фактическое приложение будет иметь более десяти тысяч наблюдений за «df», так как будет много лет и городов.Обновленный фрейм данных 'dfUpdate' может иметь несколько сотен наблюдений.
Я вижу некоторые другие решения по переполнению стека, но они отличаются тем, что у фрейма данных есть один индекс.