从data.frame中删除列表类型的列
如果data.frame具有列表列并试图将其写入csv文件,用户如何删除列表类型的所有列 dput将相当长。请参见此处的示例 请注意,完整的df有5+个列表列,我不喜欢枚举它们或按名称查找它们从data.frame中删除列表类型的列,r,list,dataframe,subset,R,List,Dataframe,Subset,如果data.frame具有列表列并试图将其写入csv文件,用户如何删除列表类型的所有列 dput将相当长。请参见此处的示例 请注意,完整的df有5+个列表列,我不喜欢枚举它们或按名称查找它们 > str(df,max.level=1) Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 2237 obs. of 30 variables: $ CATEGORY : chr "ARTICLE " "ARTICLE " "ARTICLE " "
> str(df,max.level=1)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 2237 obs. of 30 variables:
$ CATEGORY : chr "ARTICLE " "ARTICLE " "ARTICLE " "ARTICLE " ...
$ BIBTEXKEY : chr "RN69" "RN4023" "RN3332" "RN58" ...
$ ADDRESS : chr NA NA NA NA ...
$ ANNOTE : chr NA NA NA NA ...
$ AUTHOR :List of 2237
$ BOOKTITLE : chr NA NA NA NA ...
and 40+ other columns
> names(df)
[1] "CATEGORY" "BIBTEXKEY" "ADDRESS" "ANNOTE" "AUTHOR" "BOOKTITLE"
[7] "CHAPTER" "CROSSREF" "EDITION" "EDITOR" "HOWPUBLISHED" "INSTITUTION"
[13] "JOURNAL" "KEY" "MONTH" "NOTE" "NUMBER" "ORGANIZATION"
[19] "PAGES" "PUBLISHER" "SCHOOL" "SERIES" "TITLE" "TYPE"
[25] "VOLUME" "YEAR" "ISSN" "DOI" "ISBN" "URL"
>
该命令应该类似于
df%>%选择\u如果!是.list,但不完全正确
df来自
devtools::install_github("ropensci/bib2df")
library(bib2df)
url <- "https://cprd.com/bibliography/export/bibtex"
df <- bib2df(url)
如果需要使用逻辑索引:
df[,!purrr::map_lgl(df,is.list)] %>%
names()
[1] "CATEGORY" "BIBTEXKEY" "ADDRESS" "ANNOTE" "BOOKTITLE"
[6] "CHAPTER" "CROSSREF" "EDITION" "HOWPUBLISHED" "INSTITUTION"
[11] "JOURNAL" "KEY" "MONTH" "NOTE" "NUMBER"
[16] "ORGANIZATION" "PAGES" "PUBLISHER" "SCHOOL" "SERIES"
[21] "TITLE" "TYPE" "VOLUME" "YEAR" "ISSN"
[26] "DOI" "ISBN" "URL"
您还可以执行df%>%选择\u ifNegateis.list
另外,正如@akrun所提到的,
您只需使用purrr中的discard:
或者正如@markus指出的,我们可以使用keep和negate:
否则:
我们可以:
library(tidyverse)
df %>%
unnest(AUTHOR) %>%
select(-AUTHOR)
给定
得到
# A tibble: 1 x 1
# a
# <dbl>
#1 1
你确定data.frame中的列可以是list类型吗?Hi UserJT,你能用示例dput将其作为最小可复制示例,以便我们可以看到你的数据帧吗?谢谢:@akash87嵌套数据帧可以包含列表。类似mtcars%>%select_if!is.numeric请使用UnnesAuthor,然后将其删除。最好使用dput添加数据。很好,但我需要通过!is.list标准。当然我有df%>%selectTITLE,DOI,TYPE,YEAR%>%write_csv'cprd-pubs.csv'只是好奇,为什么!筛选器中的is.list失败?尝试了,但失败了。我只能引用帮助页:否定创建给定函数的否定。虽然表示逻辑否定不是。希望这有点帮助。*失败。谢谢,奇怪。也许这符合OP的目标:df%>%select_ifNegateis。list@NelsonGon或图书馆的咕噜声;如果你想呆在垃圾桶里,请继续,否定。谢谢。已编辑以添加此选项。很高兴了解否定。
keep(dat, negate(is.list))
library(tidyverse)
df %>%
unnest(AUTHOR) %>%
select(-AUTHOR)
dat <- tibble::tibble(a = 1,
b = list(d = c(1, 2)))
Filter(Negate(is.list), dat)
# A tibble: 1 x 1
# a
# <dbl>
#1 1
function (f)
{
f <- match.fun(f)
function(...) !f(...)
}