在字符串中使用多个sep参数

时间:2018-11-27 16:22:04

标签: r paste

我有一个像这样的数据框(日期):

year month start end
2000    06    01  10
2000    06    11  20
2000    06    21  30

我想创建一个字符串向量(数据框中的每一行一个),以便每个日期都遵循以下格式:

年份月份开始-结束(第一行是2000 06 01-10)。

我尝试过通过粘贴功能使用for循环:

titles <- character()
for (i in 1:nrow(dates)){
  titles[i] <- paste(dates[i, 1], dates[i,2], dates[i,3], dates[i,4])
}

> titles
[1] "2000 06 01 10" "2000 06 11 20" "2000 06 21 30"

但是我不知道如何用破折号代替最后一个空格。有没有一种方法可以强制粘贴功能执行此操作,或者我可以使用其他功能?

感谢您的帮助

3 个答案:

答案 0 :(得分:0)

按照您的解决方案进行操作,如果您只是更换

paste(dates[i, 1], dates[i,2], dates[i,3], dates[i,4])

使用

paste(dates[i, 1], dates[i,2], paste(dates[i,3], dates[i,4], sep = "-"))

应该已经可以使用了。这只是将“-”分隔贴嵌套在“”分隔贴中(默认为“”)。

一个更优雅的单行代码是应用apply:

apply(dates, 1, function(row)paste(row[1], row[2], paste(row[3], row[4], sep = "-")))
[1] "2000 06 01-10" "2000 06 11-20" "2000 06 21-30"

答案 1 :(得分:0)

您可能需要考虑:

df$titles <- with(df, paste(year, month, start, end, sep = "-"))
df
#   year month start end        titles
# 1 2000    06    01  10 2000-06-01-10
# 2 2000    06    11  20 2000-06-11-20
# 3 2000    06    21  30 2000-06-21-30

答案 2 :(得分:0)

我们可以使用unite中的tidyr

library(tidyverse)

df %>%
  unite("new_date", year:end, sep = " ") %>%
  mutate(new_date = sub("\\s(\\d+)$", "-\\1", new_date))

或带有两个unite

df %>%
  unite("temp_date", year:start, sep = " ") %>%
  unite("new_date", temp_date, end, sep = "-")

输出:

      new_date
1  2000 6 1-10
2 2000 6 11-20
3 2000 6 21-30