R:动态变量名称比较

时间:2017-10-12 20:57:58

标签: r dplyr

我在数据集中重新编码了一堆变量,并为新重新编码的变量提供了前缀" r _"在我的数据集中。

我想在对上运行table以确保重新编码是正确的。像table(v1, r_v1)这样的东西,但是我需要为很多变量做这件事。它们没有任何特定的顺序,因此我无法使用索引。

以下是可以使用的数据的可重现示例(也有关于优化该代码的任何提示!)。

mtcars %>% select(c(disp,hp)) %>%
mutate_all(funs(if_else(.>100,1,0))) %>%
rename_(.dots=setNames(names(.), paste0('r_', names(.)))) %>%
cbind(mtcars,.)

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我只想使用变量名和简单的for循环。调用修改后的数据dd

orig = c("disp", "hp")
trans = paste0("r_", orig)

check_list = list()
for (i in seq_along(orig)) {
  check_list[[i]] = table(dd[[orig[i]]], dd[[trans[i]]])
  # or whatever other check you want to do
}

check_list

然后,您可以逐个检查check_list个内容。

答案 1 :(得分:1)

要保持整洁的格式:     库(purrr)     库(tidyr)

mtcars %>% 
select(disp,hp) %>% 
mutate_all(funs(r = if_else(.>100,1,0))) %>% 
mutate(index = row_number()) %>% 
gather(key = key, value = value, -index) %>% 
separate(key, c("Variable", "Type")) %>% 
mutate(Type = ifelse(is.na(Type), "Original", "Recode")) %>% 
spread(key = Type, value = value) %>% 
select(-index) %>%  
split(.$Variable) %>% 
map(~ select(.,-Variable)) %>% 
map(~ table(.))