R - 如何通过dataframe的名称从数据框中提取确切的对象?

时间:2018-03-02 14:43:33

标签: r dataframe

我想获得一个包含3305708 obs的数据帧列。但是,我必须考虑到我不知道列的名称,我将通过索引*访问它。像这样:

column_name <- names(df)[index]
column <- df[, column_name]

那么,我的问题是什么?我的问题是:在df中我有很多列(考虑1到1000)并且列没有相同类型的数据。当我运行上面的代码时,column的类型与df$column_name_dataframe的类型不同。例如:考虑一个名为df的数据框,其中有3列称为column_1, column_2, column_3column_1的类型为character。如果我运行x <- df$column_1,则x的类型将为character。但是,如果我这样做:

name <- names(df)[1]
x <- df[, name]

x的类型为list

我该如何解决这个问题?我想获得相同类型的数据。

*在我的情况下,索引可以是1到1000之间的数字。

dput(head(df, 1))的输出:

请记住,我的数据框有3,305,708个obs,数据太多,列数太多,1000列。以下是第一行示例:

dput(head(df, 1)):

structure(list(st_acidente_feriado = NA_character_, ds_agente_causador = "VEICULO, NIC", 
ano_cat = 2013L, ds_cnae_classe_cat = "Atividades de teleatendimento", 
dt_acidente = "26/04/2013", st_dia_semana_acidente = "sex", 
ds_emitente_cat = "Empregador", hora_acidente = "1630", idade_cat = 47L, 
cd_indica_obito = "N", nm_municipio = "São Vicente", nome_uf = "São Paulo", 
ds_natureza_lesao = "CONTUSAO, ESMAGAMENTO (SUPERFICIE CUTANEA I", 
ds_cbo = "Operador de telemarketing receptivo", ds_parte_corpo_atingida = "DEDO", 
cd_tipo_sexo_empregado_cat = "Feminino", ds_tipo_acidente = "Trajeto", 
ds_tipo_local_acidente = "OUTROS"), .Names = c("st_acidente_feriado", 
"ds_agente_causador", "ano_cat", "ds_cnae_classe_cat", "dt_acidente", 
"st_dia_semana_acidente", "ds_emitente_cat", "hora_acidente", 
"idade_cat", "cd_indica_obito", "nm_municipio", "nome_uf", "ds_natureza_lesao", 
"ds_cbo", "ds_parte_corpo_atingida", "cd_tipo_sexo_empregado_cat", 
"ds_tipo_acidente", "ds_tipo_local_acidente"), row.names = c(NA, 
-1L), class = c("tbl_df", "tbl", "data.frame"))


str(df):

Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   3305708 obs. of  18 variables:
$ st_acidente_feriado       : chr  NA NA NA NA ...
$ ds_agente_causador        : chr  "VEICULO, NIC" "VEICULO, NIC" ...
$ ano_cat                   : int  2013 2013 2013 2013 2013 2013 ...
$ ds_cnae_classe_cat        : chr  "Atividades de teleatendimento" ...
$ dt_acidente               : chr  "26/04/2013" "26/04/2013" ...
$ st_dia_semana_acidente    : chr  "sex" "sex" "sex" "sex" ...
$ ds_emitente_cat           : chr  "Empregador" "Empregador" ...
$ hora_acidente             : chr  "1630" "1940" "0400" "1040" ...
$ idade_cat                 : int  47 49 47 22 57 40 57 21 35 33 ...
$ cd_indica_obito           : chr  "N" "N" "N" "N" ...
$ nm_municipio              : chr  "São Vicente" "São Paulo" ...
$ nome_uf                   : chr  "São Paulo" "São Paulo" ...
$ ds_natureza_lesao         : chr  "CONTUSAO, ESMAGAMENTO  ...
$ ds_cbo                    : chr  "Operador de telemarketing" ...
$ ds_parte_corpo_atingida   : chr  "DEDO" "DEDO" "DEDO" ...
$ cd_tipo_sexo_empregado_cat: chr  "Feminino" "Masculino" ...
$ ds_tipo_acidente          : chr  "Trajeto" "Típico" "Típico" ...
$ ds_tipo_local_acidente    : chr  "OUTROS" "EMPREGADORA" ...
- attr(*, "spec")=List of 2
.. ..$ cols   :List of 18
.. ..$ st_acidente_feriado       : list()
.. .. ..- attr(*, "class")= chr  "collector_character" "collector"
.. ..$ ds_agente_causador        : list()
.. .. ..- attr(*, "class")= chr  "collector_character" "collector"
.. ..$ ano_cat                   : list()
.. .. ..- attr(*, "class")= chr  "collector_integer" "collector"
.. ..$ ds_cnae_classe_cat        : list()
.. .. ..- attr(*, "class")= chr  "collector_character" "collector"
.. ..$ dt_acidente               : list()
.. .. ..- attr(*, "class")= chr  "collector_character" "collector"
.. ..$ st_dia_semana_acidente    : list()
.. .. ..- attr(*, "class")= chr  "collector_character" "collector"
.. ..$ ds_emitente_cat           : list()
.. .. ..- attr(*, "class")= chr  "collector_character" "collector"
.. ..$ hora_acidente             : list()
.. .. ..- attr(*, "class")= chr  "collector_character" "collector"
.. ..$ idade_cat                 : list()
.. .. ..- attr(*, "class")= chr  "collector_integer" "collector"
.. ..$ cd_indica_obito           : list()
.. .. ..- attr(*, "class")= chr  "collector_character" "collector"
.. ..$ nm_municipio              : list()
.. .. ..- attr(*, "class")= chr  "collector_character" "collector"
.. ..$ nome_uf                   : list()
.. .. ..- attr(*, "class")= chr  "collector_character" "collector"
.. ..$ ds_natureza_lesao         : list()
.. .. ..- attr(*, "class")= chr  "collector_character" "collector"
.. ..$ ds_cbo                    : list()
.. .. ..- attr(*, "class")= chr  "collector_character" "collector"
.. ..$ ds_parte_corpo_atingida   : list()
.. .. ..- attr(*, "class")= chr  "collector_character" "collector"
.. ..$ cd_tipo_sexo_empregado_cat: list()
.. .. ..- attr(*, "class")= chr  "collector_character" "collector"
.. ..$ ds_tipo_acidente          : list()
.. .. ..- attr(*, "class")= chr  "collector_character" "collector"
.. ..$ ds_tipo_local_acidente    : list()
.. .. ..- attr(*, "class")= chr  "collector_character" "collector"
..    $ default: list()
.. ..- attr(*, "class")= chr  "collector_guess" "collector"
..- attr(*, "class")= chr "col_spec"

dput(head(df, 10))的输出:

请记住,我的数据框有3,305,708个obs,数据太多,列数太多,1000列。以下是前10行的示例:

dput(head(df, 10))

structure(list(st_acidente_feriado = c(NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_), 
"VEICULO, NIC", "FACA, FACAO- FERRAMENTA MANUAL SEM FORCA MOTR", 
"ANIMAL VIVO", "MAQUINA AGRICOLA", "SER VIVO, NIC",
"MOTOCICLETA, MOTONETA", "CHAO - SUPERFICIE UTILIZADA PARA SUSTENTAR PE", 
"VEICULO RODOVIARIO MOTORIZADO"), ano_cat = c(2013L, 2013L, 2013L, 
2013L, 2013L, 2013L, 2013L, 2013L, 2013L, 2013L),
"Coleta de resíduos não-perigosos",
"Atividades de limpeza não especificadas anteriormente",
"Captação, tratamento e distribuição de água",
"Atividades de atendimento hospitalar",
"Atividades de serviços de complementação diagnóstica e terapêutica"
), dt_acidente = c("26/04/2013", "26/04/2013", "26/04/2013", 
"26/04/2013", "26/04/2013", "26/04/2013", "26/04/2013", "26/04/2013", 
"26/04/2013", "26/04/2013"), st_dia_semana_acidente = c("sex", 
"sex", "sex", "sex", "sex", "sex", "sex", "sex", "sex", "sex"
), ds_emitente_cat = c("Empregador", "Empregador", "Empregador", 
"Empregador", "Empregador", "Empregador", "Empregador", "Empregador", 
"Empregador", "Empregador"), hora_acidente = c("1630", "1940", 
"0400", "1040", "0000", "0900", "1715", "1200", "1400", "0645"
), idade_cat = c(47L, 49L, 47L, 22L, 57L, 40L, 57L, 21L, 35L, 
33L), cd_indica_obito = c("N", "N", "N", "N", "N", "N", "N", 
"N", "N", "N"), nm_municipio = c("São Vicente", "São Paulo", 
"Diadema", "Macapá", "Jaú", "Atibaia", "Curitiba", "São Leopoldo", 
"Porto Velho", "Jundiaí"), nome_uf = c("São Paulo", "São Paulo", 
"São Paulo", "Amapá", "São Paulo", "São Paulo", "Paraná",
"Rondônia", "São Paulo"), ds_natureza_lesao =
"FRATURA", "CORTE, LACERACAO, FERIDA CONTUSA,
"CORTE, LACERACAO, FERIDA CONTUSA, PUNCTURA",
"CORTE, LACERACAO, FERIDA CONTUSA, PUNCTURA",
"LUXACAO", "DISTENSAO, TORCAO"),
"Auxiliar geral de conservação de vias permanentes (exceto trilhos)", 
"Operador de máquinas-ferramenta convencionais",
"Supervisor de exploração agropecuária", "Agente de saúde pública", 
"Zelador de edifício", "Técnico de enfermagem",
"Técnico em radiologia e imagenologia"),
"DEDO", "DEDO", "MAO (exceto punho ou dedos)", "DEDO",
"MAO (exceto punho ou dedos)",
"PE (exceto artelhos)", "OMBRO"),
"Masculino", "Masculino", "Masculino", "Masculino", "Masculino", 
"Feminino", "Feminino", "Feminino", "Masculino"),
"Típico", "Típico", "Típico", "Típico", "Típico", "Típico", "Trajeto", 
"Típico", "Trajeto"), ds_tipo_local_acidente = c("OUTROS", "EMPREGADORA", 
"EMPREGADORA", "VIA PUBLICA", "EMPRESA PRESTADORA", "VIA PUBLICA", 
"EMPREGADORA", "VIA PUBLICA", "AREA RURAL", "VIA PUBLICA")),
"ds_agente_causador", "ano_cat", "ds_cnae_classe_cat", "dt_acidente", 
"st_dia_semana_acidente", "ds_emitente_cat", "hora_acidente", 
"idade_cat", "cd_indica_obito", "nm_municipio",
"ds_cbo", "ds_parte_corpo_atingida", "cd_tipo_sexo_empregado_cat", 
"ds_tipo_acidente", "ds_tipo_local_acidente"), spec = structure(list(
cols = structure(list(st_acidente_feriado = structure(list(), 
"collector")), ds_agente_causador = structure(list(), class =
"collector")), ano_cat = structure(list(), class = c("collector_integer", 
"collector")), ds_cnae_classe_cat = structure(list(), class = 
"collector")), dt_acidente = structure(list(), class =
"collector")), st_dia_semana_acidente = structure(list(), class =
"collector")), ds_emitente_cat = structure(list(), class =
"collector")), hora_acidente = structure(list(), class =
"collector")), idade_cat = structure(list(), class =
"collector")), cd_indica_obito = structure(list(), class =
"collector")), nm_municipio = structure(list(), class =
"collector")), nome_uf = structure(list(), class =
"collector")), ds_natureza_lesao = structure(list(), class =
"collector")), ds_cbo = structure(list(), class =
"collector")), ds_parte_corpo_atingida = structure(list(), class =
"collector")), cd_tipo_sexo_empregado_cat = structure(list(), class =
"collector")), ds_tipo_acidente = structure(list(), class =
"collector")), ds_tipo_local_acidente = structure(list(), class =
"collector"))), .Names = c("st_acidente_feriado", "ds_agente_causador", 
"ano_cat", "ds_cnae_classe_cat", "dt_acidente", "st_dia_semana_acidente", 
"ds_emitente_cat", "hora_acidente", "idade_cat", "cd_indica_obito", 
"nm_municipio", "nome_uf", "ds_natureza_lesao", "ds_cbo", 
"ds_parte_corpo_atingida", "cd_tipo_sexo_empregado_cat", 
"ds_tipo_acidente", "ds_tipo_local_acidente")), default =
"collector"))), .Names = c("cols", "default"), class = "col_spec"),
10L), class = c("tbl_df", "tbl", "data.frame"))

0 个答案:

没有答案