嗨,每一个人都是我面临的麻烦。
我的数据框格式错误。
就这样。
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) :
Column
的Hora must be length 30140 (the number of rows) or one, not 220
我愿意帮助你,因为我是R的新手并且不知道为什么会发生这种情况,我的直觉是当我指定环境时,某些事情是错误的,其中%>%
magrittr执行了操作管道操作员,但不知道如何指定正确的环境。
我很抱歉我的写作不好,但我的母语是西班牙语,而且我的外语有点慢。
干杯。谢谢大家。
答案 0 :(得分:0)
为了实现您的目标,您可以使用:
data <- data %>%
gather(date, data, 2:3) %>%
mutate(hour = "00:00:00")
在您的示例中,您的第二次尝试在mutate()
行中失败。问题是ncol(data)
调用中的rep()
参数没有产生正确的长度。当你改变变量时,你的函数应该产生长度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(.)))
我希望这可以澄清原始代码的问题并解决您的问题。
Buena suerte!