将数据帧的值映射到R中的另一个,可能没有plyr

问题描述 投票:1回答:1

我有两个数据框架,dfcounties。我想用df数据框中的fips列替换counties的第3列和后列中的坐标。

df = 
year            location       location_NN_1      location_NN_2      location_NN_3
2076 43.59375_-116.78125  41.15625_-90.65625  41.21875_-90.65625 41.15625_-90.65625
2077 43.59375_-116.78125  43.34375_-78.15625  43.34375_-78.21875 43.28125_-78.15625
2078 43.59375_-116.78125  41.34375_-90.78125  41.21875_-90.65625 41.53125_-73.96875
2079 43.59375_-116.78125  43.53125_-116.78125 41.34375_-90.78125               <NA>
2080 43.59375_-116.78125                <NA>               <NA>                <NA>

counties = 
fips   location
36073  43.34375_-78.15625
17161  41.34375_-90.78125

我希望输出看起来像:

output 
year            location       location_NN_1      location_NN_2      location_NN_3
2076 43.59375_-116.78125               17131             so_on             so_on
2077 43.59375_-116.78125               36073             so_on             so_on
2078 43.59375_-116.78125               17161             so_on             so_on
2079 43.59375_-116.78125      so_on, so_forth            so_on               <NA>
2080 43.59375_-116.78125                <NA>               <NA>              <NA>

也许像this solution这样的东西会起作用。我不想使用,因为它使用plyr,我没有plyr的良好经验。加载它会弄乱其他库。

任何解决方案将不胜感激。

r replace mapping
1个回答
2
投票

我们可以选择感兴趣的列,使用lapplymatch和'县'的'location'列循环遍历列,以获得匹配的数字索引,然后根据它获得相应的'fips'值,并更新数据集列([]

df[3:5] <- lapply(df[3:5], function(x) counties$fips[match(x, counties$location)])
© www.soinside.com 2019 - 2024. All rights reserved.