r - 将数字 (%Y.%m) 列拆分为两列

标签 r

所以我有一个具有以下格式的时间序列:


日期(数字,%Y.%m)
值(value)


1951.01
12

1951.02
13


我试图将日期列分成两列,如下所示:




值(value)


1951年
01
12

1951年
02
13


我试过使用 tidyr 的 separate() 函数,它有点工作。但是,出于某种原因,它在第 10 个月删除了 0,如下所示:

data$month 
... 8 9 1 11 ...
我怀疑这与将其强制为字符(?)有关。我试过使用 substr() 但它也不起作用,同样的问题。有没有更好的方法来做到这一点?
我的代码:
data %>%
separate(Date, into = c("year","month"))
** 编辑
我认为这绝对是因为我将数字日期强制转换为字符。
as.character(1951.10)
[1] "1951.1"
可重现的样本数据:
df <- structure(list(Date = c(1951.01, 1951.02, 1951.1), 
                     value = c(12,13, 14)), row.names = c(NA, -3L), 
                class = c("tbl_df", "tbl","data.frame"))

最佳答案

如果 Date 列中有数值,则应首先将其转换为 character 并保留两位小数。在这里你可以使用 sprintf 来制作它。然后你用 . 分割字符串。

试试下面的代码

df %>%
  mutate(Date = sprintf("%.2f", Date)) %>%
  separate(Date, c("Year", "Month"), "\\.")
这使
  Year  Month value
  <chr> <chr> <dbl>
1 1951  01       12
2 1951  02       13
3 1951  10       14
数据
> dput(df)
structure(list(Date = c(1951.01, 1951.02, 1951.1), value = c(12,
13, 14)), row.names = c(NA, -3L), class = c("tbl_df", "tbl",
"data.frame"))

关于r - 将数字 (%Y.%m) 列拆分为两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67076960/

相关文章:

R 如何使用较高列值对数据表进行子集化(以便子集代表列总和的 80%)

r - 如何使用按钮更新 Shiny 的数据表

python - 将 2 列的值连接成 1(相当于 R 的粘贴)

r - 设置带有端点的 ggplot 网格线/ggplot 的中断计算

R Shiny : How to hide tabPanel by a condition in server

xml - R XML + XPath - 具有多个条件的getNodeSet

R:如何在 mboost 模型中指定预测变量

java - 如何开始创建基于/使用 JGR 的 R 应用程序?

r - 添加具有 NA 值的行

r - 使用 Quanteda 一步一步创建 dfm