【问题标题】:How apply dplyr functions into a list-column?如何将 dplyr 函数应用于列表列?
【发布时间】:2019-01-19 13:59:01
【问题描述】:

我的list-column

library(tidyverse)

dataset<-as_tibble(matrix(rnorm(6*30,1000,100),ncol=6))
cluster<-kmeans(dataset,centers=3)
dataset$kmeans<-as.factor(cluster[['cluster']])
mylist<-split(dataset,dataset$kmeans)
names(mylist)<-str_c('dataset',seq_along(mylist))

obj<-dataset%>%
  group_by(kmeans)%>%
  nest()

我试试:

obj%>%
  summarise_if(.data,is.numeric,sum)

错误:无法将列表转换为函数

obj%>%
  map(~summarise_if(.data,is.numeric,sum))

UseMethod("tbl_vars") 中的错误: 没有适用于“rlang_data_pronoun”类对象的“tbl_vars”方法

在其他尝试中......

那么,如何将dplyr 函数应用到list-column 中?

【问题讨论】:

    标签: r


    【解决方案1】:

    解决方案是在列表列中使用dplyr::pull (obj$data):

    library(tidyverse)
    
    obj%>%
      pull(data)%>%
      map(~summarise_if(.,is.numeric,sum))
    
    [[1]]
    # A tibble: 1 x 6
          V1     V2     V3     V4     V5     V6
       <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
    1 12865. 11787. 12864. 13443. 12548. 13170.
    
    [[2]]
    # A tibble: 1 x 6
          V1     V2     V3     V4     V5     V6
       <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
    1 11655. 12197. 11379. 10023. 10659. 11154.
    
    [[3]]
    # A tibble: 1 x 6
         V1    V2    V3    V4    V5    V6
      <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
    1 5175. 6053. 6855. 6130. 6504. 5967.
    

    【讨论】:

    • 如果您想将结果保存在列表列中,您可以这样做obj %&gt;% mutate(sum_data = map(data, ~ summarise_if(., is.numeric, sum)))
    猜你喜欢
    • 2018-06-29
    • 2014-05-03
    • 1970-01-01
    • 2020-03-05
    • 2017-08-10
    • 2019-09-13
    • 2021-07-28
    • 2013-07-25
    • 2015-02-23
    相关资源
    最近更新 更多