【问题标题】:With DPLYR, how to build a data.frame with vectors and vectors names that need to be repeated使用 DPLYR,如何使用需要重复的向量和向量名称构建 data.frame
【发布时间】:2021-03-27 19:57:36
【问题描述】:

这是我的代码:

Regiao_Norte <- c('AM', 'RR', 'AP', 'PA', 'TO', 'RO', 'AC')
rows_Norte<- 'Regiao_Norte'
Regiao_Nordeste <- c('MA', 'PI', 'CE', 'RN', 'TO', 'PE', 'PB', 'SE', 'AL', 'BA')
rows_Nordeste<- 'Regiao_Nordeste'
Regiao_Centro_Oeste <- c('MT', 'MS', 'GO')
rows_Centro_Oeste<- 'Regiao_Centro_Oeste'
Regiao_Sudeste <- c('SP', 'RJ', 'ES', 'MG')
rows_Sudeste<- 'Regiao_Sudeste'
Regiao_Sul <- c('PR', 'RS', 'SC')
rows_Sul<- 'Regiao_Sul'

part_1<-cbind(rows_Norte,Regiao_Norte)
part_2<-cbind(rows_Nordeste,Regiao_Nordeste)
part_3<-cbind(rows_Centro_Oeste,Regiao_Centro_Oeste)
part_4<-cbind(rows_Sudeste,Regiao_Sudeste)
part_5<-cbind(rows_Sul,Regiao_Sul)

使用dplyr可以达到这个效果吗?

rbind(part_1,part_2,part_3,part_4,part_5)

我从 5 个向量开始,我想在第二列创建一个带有向量元素的 data.frame,第一列是这个向量的名称:Regiao_Norte, ...

上面的代码不是那么聪明。有什么建议使用 dplyr 包来达到这个结果吗?

【问题讨论】:

  • 嗨,我设法做到了这一点:region_list&lt;- list(Regiao_Norte, Regiao_Nordeste, Regiao_Centro_Oeste, Regiao_Sudeste, Regiao_Sul) names(region_list)&lt;- c('Regiao_Norte', 'Regiao_Nordeste', 'Regiao_Centro_Oeste', 'Regiao_Sudeste', 'Regiao_Sul') unnest(enframe(lista),cols = c(value)) 从良好的态度来看,这是一个很好的解决方案?
  • 请提供您的初始启动数据。在我看来,确实有一个简单的解决方案,但如果没有您的初始数据很难判断

标签: r dplyr


【解决方案1】:

您可以编写一个简单的函数来从向量创建数据框。 “rlang”库有非常好的函数来处理 r 对象

library(rlang)
Regiao_Norte <- c('AM', 'RR', 'AP', 'PA', 'TO', 'RO', 'AC')
Regiao_Nordeste <- c('MA', 'PI', 'CE', 'RN', 'TO', 'PE', 'PB', 'SE', 'AL', 'BA')
Regiao_Centro_Oeste <- c('MT', 'MS', 'GO')
Regiao_Sudeste <- c('SP', 'RJ', 'ES', 'MG')
Regiao_Sul <- c('PR', 'RS', 'SC')

create_df = function(objects) {
    df = data.frame(NULL)
    for (object in objects){
    df = rbind(df, data.frame(region = object, value =  eval(sym(object)), stringsAsFactors = F))
      } 
    return(df)
  }

out = create_df(c("Regiao_Norte","Regiao_Nordeste","Regiao_Centro_Oeste","Regiao_Sudeste","Regiao_Sul"))
out

【讨论】:

    猜你喜欢
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 2018-08-13
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多