【问题标题】:select() selects more columns than I tell it to. Why? - Rselect() 选择的列比我告诉它的要多。为什么? -R
【发布时间】:2019-10-17 02:32:48
【问题描述】:

例如,当我从dplyr 使用select() 时:

mtcars %>% select(., cyl, disp)

它正确选择了cyldisp。但是当我在我正在处理的数据框中执行此操作时,(假设它是iris):

iris %>% select(., Sepal.Length, Sepal.Width)

它会选择 Sepal.LengthSepal.WidthPetal.Length,即使我没有告诉选择 Petal.Length。这非常令人沮丧,因为我在文档、stackoverflow 或谷歌中找不到任何解释。

最后,我想知道select() 什么时候会选择我没有告诉它选择的列?有什么建议吗?

编辑 - 数据:

structure(list(codigo_estacion = 11545000L, institucion = "DGA", 
    fuente = "dga_web", nombre = "Rio Baker Bajo ÑAdis", altura = 45L, 
    latitud = -47.5, longitud = -72.9749984741211, codigo_cuenca = 115L, 
    nombre_sub_cuenca = "Rio Baker Entre Arriba Rio De La Colonia Y Desemb.", 
    cantidad_observaciones = 4736L, fecha = structure(15624, class = "Date"), 
    caudal = 692, gauge_id = 11545000L, gauge_name = "Rio Baker Bajo ÑAdis", 
    precip_promedio = 0.454545468091965, temp_max_promedio = 17.0166664123535, 
    estacion_ano = "Primavera", caudal_extremo = 0, temp_extremo = 0, 
    precip_extremo = 0), class = c("grouped_df", "tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -1L), groups = structure(list(
    codigo_estacion = 11545000L, estacion_ano = "Primavera", 
    .rows = list(1L)), row.names = c(NA, -1L), class = c("tbl_df", 
"tbl", "data.frame"), .drop = TRUE))

我正在使用的代码:

df %>% dplyr::select(codigo_estacion, caudal_extremo)

但它给出了estacion_anocodigo_estacioncaudal_extremo 的列。

【问题讨论】:

  • 它应该对我有用。重新启动 R 并重试
  • 不知道它是否相关,但在这些调用中应该不需要.,当您使用%>% 时,数据帧会隐式传递给函数。
  • 你在 iris 数据集中执行了group_by 吗?当您执行 group_by 时,分组列会自动添加到输出中,即使您没有选择它们。运行class(iris) 并检查输出是否包含grouped_df
  • 数据框将保持分组状态,直到您取消分组。您可以随时使用ungroup 功能取消分组:mtcars %>% group_by(cyl) %>% mutate(n=n()) %>% ungroup
  • 当您在分组数据框上运行select 时(例如,像这样:mtcars %>% group_by(cyl) %>% select(mpg)),您会收到这样的消息:Adding missing grouping variables: `cyl`

标签: r select dplyr data-manipulation


【解决方案1】:

您提供的数据是由变量estacion_ano 分组的数据框。在分组数据框上使用select 时,分组变量将自动添加到结果中。你可能想在使用select之前ungroup

df %>% 
  dplyr::ungroup() %>% 
  dplyr::select(codigo_estacion, caudal_extremo)

# A tibble: 1 x 2
# codigo_estacion caudal_extremo
#           <int>          <dbl>
# 1      11545000              0

【讨论】:

    猜你喜欢
    • 2010-12-07
    • 2022-06-16
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 2014-05-01
    • 2023-02-13
    相关资源
    最近更新 更多