我想在所有列上应用一个函数,这些列是嵌套的数据框架或标题。
检查列是否是嵌套数据框架(例如与mutate_if
或across
一起使用)的最佳方法是什么?下面是一个嵌套数据框架示例,它应该与。
(mpg %>% group_by(manufacturer) %>% nest())$manufacturer
(mpg %>% group_by(manufacturer) %>% nest())$data
我想到的一个非常粗糙和简单的方法是:
library(tidyr)
library(dplyr)
#' Checks whether or not a column is a nested data frame
#'
#' @param col column
#'
#' @return TRUE if it is a nested data frame (List of data frames), otherwise FALSE
#' @export
#'
#' @examples
is.nested.data.frame = function(col){
if(is.list(col)){
if(length(col) > 0){ # We need to be careful about empty lists for the next step
if(is.data.frame(col[[1]])){
return(TRUE)
}
}
}
return(FALSE)
}
is.nested.data.frame((mpg %>% group_by(manufacturer) %>% nest())$manufacturer)
is.nested.data.frame((mpg %>% group_by(manufacturer) %>% nest())$data)
df = mpg %>% group_by(manufacturer) %>% nest()
df
df %>% mutate(across(where(is.nested.data.frame), length))