使用聚集函数tidyverse后,无法使用mutate创建新变量。

使用聚集函数tidyverse后,无法使用mutate创建新变量。,r,dplyr,tidyr,tidyverse,R,Dplyr,Tidyr,Tidyverse,大家好,这是我面临的麻烦 我有一个数据帧,它是在一个错误的格式 就这样。 id | 1/3/2017 | 1/4/2017| a | 4 | 4| b | 5 | 5| c | 6 | 6| d | 7 | 7| 显然,我想要这样整洁的格式,还有一个00:00:00小时的附加列 id |日期|小时|数据| a | 2017年1月3日| 00:00:00 | 4| 2017年1月3日b:00:00 | 5| 2017年1月3日c | 00:00:00 | 6| 2017年3月1日00:00:

大家好,这是我面临的麻烦

我有一个数据帧,它是在一个错误的格式

就这样。

id | 1/3/2017 | 1/4/2017|
a | 4 | 4|
b | 5 | 5|
c | 6 | 6|
d | 7 | 7|

显然,我想要这样整洁的格式,还有一个00:00:00小时的附加列

id |日期|小时|数据|
a | 2017年1月3日| 00:00:00 | 4|
2017年1月3日b:00:00 | 5|
2017年1月3日c | 00:00:00 | 6|
2017年3月1日00:00:00 | 7|
a | 1/4/2017 | 00:00:00 | 4|
2017年4月1日b:00:00 | 5|
2017年4月1日c | 00:00:00 | 6|
2017年3月1日00:00:00 | 7 |

执行此操作的代码如下所示

数据%
收集(日期、数据,“2017年1月3日”:“2017年1月4日”)

数据%
变异(小时=重复(“00:00:00”,ncol(数据)))

这使得我的代码比我想要的要长,但是,我喜欢使用的函数不起作用

数据%
收集(日期、数据,“2017年1月3日”:“2017年1月4日”)%>%
变异(小时=代表(“00:00:00”),ncol(数据)

我得到的错误消息如下

mutate_impl(.data,dots)中的错误:
列
hora
的长度必须为30140(行数)或1,而不是220

我会感谢您的帮助,因为我是R的新手,不知道为什么会发生这种情况,我的直觉是,当我使用
%>%%
magrittr管道操作符指定执行操作的环境时,出现了一些问题,但不知道如何指定正确的环境

很抱歉我写得不好,但我的母语是西班牙语,而且我的外语学习有点慢


干杯。谢谢大家。

要实现您的目标,您可以使用:

data <- data %>% 
  gather(date, data, 2:3) %>% 
  mutate(hour = "00:00:00")
因此,您实际上不需要重复它。但在某些情况下,您必须提供与数据长度相同的向量。在您的示例中,您试图通过提供
ncol(data)
来实现这一点,问题是您不清楚要调用什么
data

在您的示例中:

ncol(data)
[1] 3 
好的,这既不是长度1,也不是数据的长度(在
收集
之后)。一种解决方案是通过更改为
nrow
来提供数据的行数,但如果您更改为
nrow(data),请小心
您将获得原始数据的长度,而不是上一步的数据。要使用在
收集
步骤后获得的数据,请使用
nrow(.)
,此处点是上一步结果的占位符

因此,这也应该起作用:

data %>% 
  gather(date, data, 2:3) %>%
  mutate(hour = rep("00:00:00", nrow(.))) 
我希望这能澄清您原始代码的问题并解决您的问题


Buena suerte!

要实现您的目标,您可以使用:

data <- data %>% 
  gather(date, data, 2:3) %>% 
  mutate(hour = "00:00:00")
因此,您实际上不需要重复它。但在某些情况下,您必须提供与数据长度相同的向量。在您的示例中,您试图通过提供
ncol(data)
来实现这一点,问题是您不清楚要调用什么
data

在您的示例中:

ncol(data)
[1] 3 
好的,这既不是长度1,也不是数据的长度(在
收集
之后)。一种解决方案是通过更改为
nrow
来提供数据的行数,但如果您更改为
nrow(data),请小心
您将获得原始数据的长度,而不是上一步的数据。要使用在
收集
步骤后获得的数据,请使用
nrow(.)
,此处点是上一步结果的占位符

因此,这也应该起作用:

data %>% 
  gather(date, data, 2:3) %>%
  mutate(hour = rep("00:00:00", nrow(.))) 
我希望这能澄清您原始代码的问题并解决您的问题


Buena suerte!

data%collect(日期,数据,2:3)%%>%mutate(小时=“00:00:00”)
谢谢你,这很有效。祝你过得愉快。@Donleek,作为答案发布(并解释)?对不起,昨天没有时间,我会很快发布答案。
data%collect(日期,数据,2:3)%%>%mutate(小时=“00:00”)
谢谢,这很有效。祝你有愉快的一天。@Donleek,作为答案发布(并解释)?对不起,昨天没有时间,我很快会发布一个答案。我忘了提到,当您在多个变量和对象中使用相同的名称时,这是非常令人困惑的,在您的情况下,数据称为data,还有一个变量称为data。我忘了提到,当您在多个变量和对象中使用相同的名称时,这是非常令人困惑的cts,在您的例子中,数据称为data,还有一个变量称为data。