在R中将listcolumn的部分设置为NULL

时间:2017-02-22 17:53:22

标签: r dplyr purrr

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,]

`

现在 - 我希望将mazda的listcolumn设置为NULL。

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

但是,比较mt4$lmt5$l我发现“mazda”元素已被删除,但其他元素已向上移动。 有人能解释为什么这是合乎逻辑的? 如何有选择地仅对列表列中的某个元素执行NULL操作?

1 个答案:

答案 0 :(得分: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"要返回多个匹配,这也会起作用;显然不是这个例子的一个因素,但很高兴知道。)