【发布时间】:2019-10-17 02:32:48
【问题描述】:
例如,当我从dplyr 使用select() 时:
mtcars %>% select(., cyl, disp)
它正确选择了cyl 和disp。但是当我在我正在处理的数据框中执行此操作时,(假设它是iris):
iris %>% select(., Sepal.Length, Sepal.Width)
它会选择 Sepal.Length、Sepal.Width 和 Petal.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_ano、codigo_estacion 和caudal_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