2017-10-12 109 views
0

我重新编写了数据集中的一堆变量,并在我的数据集中给出了新记录的变量前缀“r_”。我想运行table对,以确保重新编码是正确的。像table(v1, r_v1)之类的,但我需要为很多变量做。他们没有任何特定的顺序,所以我不能使用索引。R:动态变量名称比较

下面是一个可重复使用的数据示例(也有关于优化代码的任何提示,敬请关注!)。

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

任何想法?

+0

当我运行代码,我结束了一个名为““r_disp_r”列'和''r_hp_r“',但你只谈一个'r'前缀。哪个是对的? – Gregor

+0

那么,当我运行第二行来“变异”这两个变量时,我想给他们一个标记,所以我知道他们是什么。数据集中的最后两个变量是最后一个。 – vashts85

+0

更新代码以提供更清晰的示例版本。 – vashts85

回答

1

我只是使用变量名和简单的循环。呼叫您修改后的数据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

为了保持与您启动整齐格式: 库(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(.)) 
+0

我对这里的一些命令不熟悉,比如'index'或'gather',你可以引导我了解每一行的内容吗? – vashts85

+0

您需要每行的唯一标识符才能应用扩散函数。这将所有数据保存在一起。我刚刚创建了一个包含行号的列,但是您可以组成任意索引。 收集将行从宽转换为长格式。也就是说,所有的列都被转换为键值结构。由于'index'需要保留为'spread()'函数,因此请将其与键值列分开。 通过'spread()'行运行管道,以查看结果:每个观察对应一个变量,原始并排编码。 –