我有三个数据集
一个包含大量关于风暴的信息。
一个包含城市全名和缩写的。
还有一个包含每个州的年份和人口。
我想要做的是在第一个数据框风暴中添加一个列,称为人口,其中包含使用其他两个数据框 state_codes 和 states 的每个州每年的人口。
谁能指出我正确的方向?下面是一些示例数据
> head(storms)
num yr mo dy time state magnitude injuries fatalities crop_loss
1 1 1950 1 3 11:00:00 MO 3 3 0 0
2 1 1950 1 3 11:10:00 IL 3 0 0 0
3 2 1950 1 3 11:55:00 IL 3 3 0 0
4 3 1950 1 3 16:00:00 OH 1 1 0 0
5 4 1950 1 13 05:25:00 AR 3 1 1 0
6 5 1950 1 25 19:30:00 MO 2 5 0 0
> head(state_codes)
Name Abbreviation
1 Alabama AL
2 Alaska AK
3 Arizona AZ
4 Arkansas AR
5 California CA
6 Colorado CO
head(states)
Year Alabama Arizona Arkansas California Colorado Connecticut Delaware
1 1900 1830 124 1314 1490 543 910 185
2 1901 1907 131 1341 1550 581 931 187
3 1902 1935 138 1360 1623 621 952 188
4 1903 1957 144 1384 1702 652 972 190
5 1904 1978 151 1419 1792 659 987 192
6 1905 2012 158 1447 1893 680 1010 194
答案 0 :(得分:1)
您没有提供太多数据进行测试,但这应该可以。
首先,将 version: '3'
services:
backend:
image: backend:latest
restart: always
env_file:
- ./envs/dev.env
command: 'sh /scripts/dev.sh'
ports:
- "9000:9000"
连接到 storms
,以便它具有 state_codes
中的状态名称。我们可以同时重命名 states
以匹配 yr
。
然后将 states$Year
转为长格式。
最后,将新版 states
加入长版 storms
。
states
答案 1 :(得分:0)
这个答案不使用 dplyr,但我提供它是因为我知道它在大型数据集上非常快。
它遵循与接受的答案相同的第一步:将州名合并到风暴数据集中。但后来它做了一些聪明的事情(我偷了这个想法):它创建了一个行号和列号的矩阵,然后使用它从“状态”数据集中提取新列所需的元素。
#Add the state names to storms
storms<-merge(storms, state_codes, by.x = 6, by.y = 2, all.x = T)
#Get row and column indexes for the elements in 'states'
r<-match(storms$year, states$year)
c<-match(storms$state.y, names(states)) #state.y was the name of the merged column
smat<-cbind(r,c)
#And grab them into a new vector
storms$population<-states[smat]