【问题标题】:cannot create new variable with mutate after using gather function tidyverse.使用收集函数 tidyverse 后无法使用 mutate 创建新变量。
【发布时间】:2017-08-17 17:40:25
【问题描述】:

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

我有一个格式错误的数据框。

就像这样。 id | 1/3/2017| 1/4/2017 | a | 4 | 4 | b | 5 | 5 | c | 6 | 6 | d | 7 | 7 |

显然我想要这样的整洁格式,以及一个 00:00:00 小时的附加列 id | date | hour |data| a | 1/3/2017 |00:00:00 |4 | b | 1/3/2017 |00:00:00 |5 | c | 1/3/2017 |00:00:00 |6 | d | 1/3/2017 |00:00:00 |7 | a | 1/4/2017 |00:00:00 |4 | b | 1/4/2017 |00:00:00 |5 | c | 1/4/2017 |00:00:00 |6 | d | 1/3/2017 |00:00:00 |7 |

执行此操作的代码如下

data <- data %>% gather(date, data, "1/3/2017":"1/4/2017")

data <- data %>% mutate(hour = rep("00:00:00", ncol(data)))

这使我的代码比我想要的要长,但是我喜欢使用的功能不起作用

data <- data %>% gather(date, data, "1/3/2017":"1/4/2017") %>% mutate(hour = rep("00:00:00", ncol(data)

我得到的错误信息如下

Error in mutate_impl(.data, dots) : Columnhoramust be length 30140 (the number of rows) or one, not 220

我会感谢您的帮助,因为我是 R 新手,不知道为什么会这样,我的直觉是,当我使用 %&gt;% magrittr 管道运算符指定执行操作的环境时,出现了问题,但不知道如何指定正确的环境。

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

干杯。谢谢大家。

【问题讨论】:

  • data &lt;- data %&gt;% gather(date, data, 2:3) %&gt;% mutate(hour = "00:00:00")
  • 嗯,谢谢,这非常有效。祝你有美好的一天。
  • @donlelek,作为答案发布(并解释)?
  • 对不起,昨天没时间,我会尽快回复。

标签: r dplyr tidyr tidyverse


【解决方案1】:

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

data <- data %>% 
  gather(date, data, 2:3) %>% 
  mutate(hour = "00:00:00")

在您的示例中,您的第二次尝试在 mutate() 行中失败。问题是rep() 调用中的ncol(data) 参数没有产生正确的长度。当你改变一个变量时,你的函数应该产生长度 1 或数据的长度,在这种情况下:

length("00:00:00")
[1] 1

所以你实际上不需要重复它。但在某些情况下,您必须提供与数据长度相同的向量。在您的示例中,您试图通过提供ncol(data) 来做到这一点,问题是不清楚您想调用什么data

在你的例子中:

ncol(data)
[1] 3 

嗯,这既不是长度 1,也不是您的数据长度(在gather 之后)。一种解决方案是通过更改为nrow 来提供数据的行数,但请注意,如果您这样做nrow(data),您将获得原始数据的长度,而不是上一步的数据。要使用gather 步骤后获得的数据,请使用nrow(.),这里的点是上一步结果的占位符。

所以这也应该有效:

data %>% 
  gather(date, data, 2:3) %>%
  mutate(hour = rep("00:00:00", nrow(.))) 

我希望这可以澄清您原始代码的问题并解决您的问题。

布埃纳苏尔特!

【讨论】:

  • 我忘了说,当您在多个变量和对象中使用相同的名称时会非常混乱,在您的情况下,数据称为数据,并且还有一个变量称为数据。
猜你喜欢
  • 2017-03-10
  • 2018-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-21
  • 1970-01-01
相关资源
最近更新 更多