R:动态变量名称比较
我重新编写了数据集中的一堆变量,并在我的数据集中给出了新记录的变量前缀“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,.)
任何想法?
我只是使用变量名和简单的循环。呼叫您修改后的数据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
内容一次一个。
为了保持与您启动整齐格式: 库(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(.))
我对这里的一些命令不熟悉,比如'index'或'gather',你可以引导我了解每一行的内容吗? – vashts85
您需要每行的唯一标识符才能应用扩散函数。这将所有数据保存在一起。我刚刚创建了一个包含行号的列,但是您可以组成任意索引。 收集将行从宽转换为长格式。也就是说,所有的列都被转换为键值结构。由于'index'需要保留为'spread()'函数,因此请将其与键值列分开。 通过'spread()'行运行管道,以查看结果:每个观察对应一个变量,原始并排编码。 –
当我运行代码,我结束了一个名为““r_disp_r”列'和''r_hp_r“',但你只谈一个'r'前缀。哪个是对的? – Gregor
那么,当我运行第二行来“变异”这两个变量时,我想给他们一个标记,所以我知道他们是什么。数据集中的最后两个变量是最后一个。 – vashts85
更新代码以提供更清晰的示例版本。 – vashts85