使用聚集函数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。