【问题标题】:R- How to add parts of a column to another column in a dataframe?R-如何将列的一部分添加到数据框中的另一列?
【发布时间】:2017-12-05 19:18:44
【问题描述】:

我有一个非常具体的问题。我的数据框如下所示:

我的问题是日期和日期列。目前是这样的:

Year-month-1 - 然后在下一列中显示日期。

我希望它看起来像一个普通的日期列,比如年月日。所以我想从第二列中取出天数,并用第一列中的 01 替换它们。

知道怎么做吗?

【问题讨论】:

  • 试试paste0(substr("1992-06-01", 1, 8), substr("Day21", 4, 5))。然后通过您的 df.properties 的相应列更改其中的字符串。此外,图片不是发布数据的正确方式,dput(data) 是。
  • 类似 newdate

标签: r date dataframe replace


【解决方案1】:

给你

library(lubridate)
library(tidyr)
library(dplyr)

df %>% unite(new_Date, Date, Day, sep = ' ') %>% mutate(new_Date = ymd(gsub("([0-9]{2} Day)", "", new_Date)))

这使用了 tidyr::unite 和 lubridate::ymd 以及 dplyr 函数。

【讨论】:

  • 这对我有用!虽然我不能真正完全理解命令!谢谢!
  • 所以 dplyr 与链一起工作,即%>% 运算符。在这种情况下,该命令使用 tidyr::unite 将 Date 和 Day 列与空格分隔符组合起来,并创建一个名为 new_Date 的新列。然后我们使用gsub 应用一些正则表达式来将类似于1992-06-01 Day21 的新列转换为1992-06-21。为此,我们基本上将01 Day 部分替换为空字符串。最后使用lubridate::ymd 函数将其转换为日期。我建议花一些时间学习 dplyr
【解决方案2】:

我们可以使用dplyr rearlubridate 包。

library(readr)
library(dplyr)
library(lubridate)

df <- df %>% 
  mutate(Date = ymd(paste(year(Date), month(Date), parse_number(Day), sep = '-')))

parse_number(Day) 函数从Day 列中获取数值。 year(Date)Date 获取年份,month(Date)Date 获取月份。

然后paste 将年-月-日与连字符组合起来作为分隔符sep = '-'ymd 将其转换为日期格式。 mutate(Date 将新值插入到 Date 列中。

【讨论】:

  • 所以我不必删掉 Day 列中的数字?因为我到处都有 Day23 或类似的东西。 23会自己提取吗?
  • @Essi Date 列中的天数将替换 Day 列中的值。
  • 我现在试了一下,当我这样做时,我的 Day 列每行只有 1 个,而 Date 列根本没有改变。 ://
  • @Essi 但是您要求将Day 列替换为Date 列的日期。从您的数据框的图片来看,您的 Date 列只有 1 天。因此Day 将变为 1。如果您的 Date 是 '1992-06-30`,则 Day 的值为 30。
  • 好的,我现在看到问题了。我的问题可能是通过两种方式来理解。我的意思是,取“Day”列的数字,并用这些数字替换“Date”列的“01”,以获得正常的日期列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-03
  • 2018-06-27
  • 1970-01-01
  • 2017-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多