问题
为什么下面的两个代码返回不同的结果,或者这个代码中“date”变量列前面的“-”有什么用?
bikes <- read_csv("https://raw.githubusercontent.com/whipson/Ottawa_Bicycles/master/bikes_app.csv", col_types = c("?nnnnnnnnnnnnnn"))
coords <- read_csv("https://raw.githubusercontent.com/whipson/Ottawa_Bicycles/master/coords.csv")
下面的代码在date变量前有没有“-”的结果是不同的,所以我想知道在代码中“date”前使用“-”的方法是什么?
bikes_plot <- bikes %>%
pivot_longer(names_to = "counter", values_to = "count", -date) %>%
left_join(coords, by = "counter")
bikes_plot <- bikes %>%
pivot_longer(names_to = "counter", values_to = "count", date) %>%
left_join(coords, by = "counter")
我很困惑为什么R控制台中的代码的两个结果是不同的?
在pivot_longer(names_to = "counter", values_to = "count", -date)
中,如果"values_to = "count"
,count是csv文件中的现有列名,或者它是一个摘要,我也会感到害怕。
1条答案
按热度按时间f0brbegy1#
在R中,当你命名参数时,它们总是被赋给形式定义中的相应名称;当参数没有被命名时,它们在arg列表中(
...
之前)从左到右填充那些没有被赋给命名参数的参数。如果你看一下
pivot_longer
的参数:接听您的电话:
%>%
管道中的“当前数据”被赋给第一个参数,即data
。下一个未命名的参数-date
(或另一个块中的date
)被赋给cols
,即前导
-
的出现意味着“除date
之外的所有列“,以整齐选择的方式选择列。其他选项可以是everything()
、ends_with("bar")
等。当您说
-date
时,您是说您希望date
列保持不变:它仍然是一列,在这种情况下,您将把所有剩余的列旋转/调整为两列:一列"count"
保存其他值,"counter"
包含从中检索count
的列名。因为我们选择了除一列之外的所有列进行透视(并且我们没有执行任何其他花哨的按模式透视),所以我们应该看到生成的(ncol(bikes)-1) * nrow(bikes)
行。当您改为使用
date
时(而不是-date
),您是说"仅“透视该列...这似乎有点愚蠢,因为它所做的全部工作是删除date
列,添加一个名为"counter"
的列,该列始终包含"date"
(透视列的名称),以及一个名为"count"
的列,该列有效地(在本例中)与原始date
列完全相同。其余列不被触及,并且由于我们旋转的列数仅为1,所以帧中的行数不变。