2017-02-22 72 views
2
library(tidyverse) 
data(mtcars) 
mtcars <- rownames_to_column(mtcars,var = "car") 
mtcars$id <- c(1:length(mtcars$car)) 
mtcars$make <- map_chr(mtcars$car,~strsplit(.x," ")[[1]][1]) 

mt2 <- mtcars %>% select(1:4,id,make) %>% nest(-make,.key = "l") 
mt4 <- mt2[1:5,] 
mt5 <- mt2[1:5,] 

`設置部分

現在 - 我倒是想有馬自達設置爲NULL listcolumn。

mt4[mt4$make=="Mazda","l"]<-NULL 

然而,比較mt4$lmt5$l我發現,「馬自達」元素已被刪除,但其他元素已經向上轉移。 有人可以解釋爲什麼這是合乎邏輯的嗎? 如何選擇性地只清空listcolumn中的某個元素?

+1

始終包含非基本包在你的示例代碼,請。 – r2evans

回答

3

請在您的問題中包含非基礎軟件包。在這種情況下,我們需要:

library(dplyr) 
library(purrr) 
library(tidyr) 
library(tibble) 

(或只是library(tidyverse),我相信)。

通過將NULL這樣分配給元素,您告訴R 從列表中刪除該元素,從而使其更短。如果您想用NULL元素替換元素,請嘗試使用

mt4[mt4$make=="Mazda","l"] <- list(list(NULL)) 

改爲。 (這恰好也是工作,如果條件mt4$make=="Mazda"返回多個匹配;顯然與這個例子中的一個因素,但良好的知道。)

+1

互補例如:嘗試'mtcars [1,1] < - NULL',你'錯誤:更換有zero' – Gregor

+0

並感謝提供獨立包裝的長度 - 我喜歡不必附上* *的一切。 – Gregor

+0

Thx。我仍然不太清楚列表(列表()) - 請解釋爲什麼雙列表是必要的。 – Misha