使用 for 循环对多列进行 mutate 来重新编码值

2023-12-30

我需要根据另一个表对数据帧的多列上的值进行重新编码。

我必须使用侧表重新编码数据表的多个列的值。 这些值对应于我必须用地名替换的地理标识符。 所以我决定做一个循环,但是循环之外有效的方法不再有效。 我无法在 for 循环中使用 mutate 。

我的真实数据包含 274 列,其中 38 列需要重新编码。该列有许多不同的名称(它们不是调用位置”)

我的主要数据集:

 id <- c(1, 2, 3)
 departure <- c(1, 2, NA)
 arrival <- c(3, 1, 2)
 transit <- c(NA,NA,1)
dataset <- data.frame(id, departure, arrival, transit)

另一张表:

geo_id <- c(1, 2, 3)
place_name <- c("Paris", "Nantes", "London")
geocode <- data.frame(geo_id, place_name)

我的循环:

var <- c("departure", "arrival", "transit") #the columns that should by recode (must be a vector with my  real data)

for (i in var) {
  print(i)
  dataset <- dataset %>% 
  mutate(i = geocode$place_name[match(i, geocode$geo_id)])

}

mutate 创建一个新的列调用i!如何避免这种情况?


With dplyr, 你可以做:

dataset %>%
 mutate_at(vars(one_of(var)), ~ geocode$place_name[match(., geocode$geo_id)])

  id place1 place2 place3
1  1  Paris London   <NA>
2  2 Nantes  Paris   <NA>
3  3   <NA> Nantes  Paris

或者添加tidyr:

dataset %>%
 pivot_longer(one_of(var)) %>%
 left_join(geocode, by = c("value" = "geo_id")) %>%
 select(-value) %>%
 pivot_wider(names_from = name, values_from = place_name)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 for 循环对多列进行 mutate 来重新编码值 的相关文章

随机推荐