2017-10-12 154 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()'行運行管道,以查看結果:每個觀察對應一個變量,原始並排編碼。 –