r - 在 R 中将列表列的部分设置为 NULL

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

`

现在 - 我想将马自达的列表列设置为 NULL。

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

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

最佳答案

请在您的问题中包含非基础包。在这种情况下,我们需要:

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

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

通过将 NULL 像这样分配给一个元素,您可以告诉 R 从列表中删除该元素,从而使其更短。如果您想用 NULL 元素替换该元素,请尝试

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

相反。 (如果条件 mt4$make=="Mazda" 返回多个匹配项,这也适用;显然不是此示例的一个因素,但很高兴知道。)

关于r - 在 R 中将列表列的部分设置为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42398866/

相关文章:

r - 无法在 Virtualbox 中的 CentOS 7 上编译 R Rspectra 包

r - 如何对 R data.table 中的列表列进行操作以输出另一个列表列?

r - mutate 找不到函数

从left_join删除相同的列

重构任意嵌套列表

r - 从 apply/map 循环中提取重复索引

r - 如何在R中将一个分组变量分成两个带有字符串值的变量?

r - 在 R、OSX 10.11.6 中绘制图表时,ÅÄÖ(瑞典字符)不可见

apache-spark - 将组计数列添加到 PySpark 数据帧

r - 我可以使用 `across` 或 `{purrr}` 语法来缩短和简化我的 dplyr 代码吗?