2016-11-13 64 views
1

我無法使用名稱作爲變量運行的真棒tidyr complete()函數。使用內置的例子:tidyr complete()以變項名作爲變量

df <- data_frame(
group = c(1:2, 1), 
item_id = c(1:2, 2), 
item_name = c("a", "b", "b"), 
value1 = 1:3, 
value2 = 4:6 
) 

df %>% complete(group, nesting(item_id, item_name)) 

...按預期工作

gr="group" 
id="item_id" 
name="item_name" 
df %>% complete_(gr, nesting_(id, name),fill = list(NA)) 

...但不會引發錯誤,但沒有工作,要麼

任何幫助表示讚賞!

+0

根據源代碼, 'nesting_'只有一個參數(一個列表)。 –

+0

是否應該扔箭頭,我想知道? –

+0

@David Arenburg:當fill = list(NA)缺失時它會這樣做 – ChriiSchee

回答

1

我認爲這是一個錯誤,complete_不能像complete可以與data.frames或列表的列上工作,但這裏的使用unite_separate模擬nesting解決方法:

df %>% unite_('id_name', c(id, name)) %>% 
    complete_(c(gr, 'id_name')) %>% 
    separate(id_name, c(id, name)) 

## # A tibble: 4 × 5 
## group item_id item_name value1 value2 
## * <dbl> <chr>  <chr> <int> <int> 
## 1  1  1   a  1  4 
## 2  1  2   b  3  6 
## 3  2  1   a  NA  NA 
## 4  2  2   b  2  5 
+0

感謝您的回答@alistaire這適用於小數據框。當我在一個大對象上嘗試模式時,我得到一條警告消息:在691968個位置的值太多...並且該函數沒有完成整個數據幀 – ChriiSchee

+0

該錯誤通常是因爲其他分隔符字符已經存在於數據中,所以它分裂了太多次。 'separate'的'sep'參數默認爲任何非字母數字字符,但是您可以通過添加'sep ='_''將其限制爲'unite'使用的分隔符(默認爲'_')。 – alistaire

+0

你說得對。實際上在我的數據集中就是這種情況。謝謝 – ChriiSchee