【问题标题】:R: Separate String Without Delimiter (like Fixed Width in Excel)R:没有分隔符的单独字符串(如 Excel 中的固定宽度)
【发布时间】:2016-10-23 03:16:19
【问题描述】:

数据集看起来很像这样

我四处搜索,但只找到需要分隔符的函数。我设法用两列成功地将文件导入到 R 中。

然后我想将 DATE 列分为“年”、“月”和“日期”。所以我想总共有 4 列。这就是我有货的地方。该列没有通常带有日期格式的“/”或“-”。

感谢您的帮助。

【问题讨论】:

  • 它由\t 分隔。您可以通过复制 excel 文件的一部分并在 R 中将其作为字符串运行来判断。
  • 嗨,我刚刚意识到我还不清楚。我想将 DATE 列分成“年”、“月”和“日期”。日期以 YYYYMMDD 格式存储。但它只是没有通常的“/”或“-”来分隔。
  • 您可以尝试read.fwf(即使用固定宽度而不是分隔符)。例如,您将使用c(4,2,2,10)(最后一个需要足够大以涵盖价格的所有数字)
  • as.Date('19981201', '%Y%m%d')

标签: r split


【解决方案1】:

正如@alistaire 所示,您可以将您拥有的内容转换为 R 识别的日期格式(将下面的单个字符串替换为您的列向量 df$DATE 以处理整个数据框):

date <- as.Date( '19981201', '%Y%m%d' )
date
[1] "1998-12-01"

从那里,您可以随意分开您的年、月和日。

year <- format( date, "%Y")
year
[1] "1998"

month <- format( date, "%m" )
month
[1] "12"

day <- format( date, "%d" )
day
[1] "01"

当然,您也可以跳过日期步骤,只需将前 8 个字符拆分为 3 个较短的字符串(正如 @warmoverflow 所建议的那样),但我建议在实践中使用上述方法可能更好。主要是因为您最好将日期格式用于排序和绘图等操作,因此在此过程中也使用它是一个好主意。

针对您的回答/后续问题:

请注意,在步骤 3 的控制台输出中,列向量被标记为类 int(整数)。您可能需要确保将其作为字符提供给as.Date。看起来这就是您在第 4 步中尝试执行的操作,但是通过将向量引用括在引号中,您传递了字符串“v1$DATE”,R 不知道该怎么处理。而是:

v1$date_v2 <- as.Date( as.character( v1$DATE ), format = "%Y%m%d" )

【讨论】:

  • 谢谢罗斯科娃!它几乎奏效了。出于某种原因,原始代码在“v1$date_v2
  • 啊,是的,错字,我的错。 = 在那里绝对是必要的。
猜你喜欢
  • 2020-04-18
  • 2019-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多