我正在嘗試使用字符向量重命名一些資料檔案。每個檔案包含對應于月份和年份的資料。我想將檔案重命名為:“month_year”。
我已經成功地創建了我想要的字符向量(見下文),但我想知道是否有更簡潔的方法來實作這一點。必須有一種方法可以在一個函式中執行此操作,是嗎?最好在基數 R 中。
data.names <- expand.grid(month = c("June", "July", "August", "September"),
year = c(1984:2017),
stringsAsFactors = FALSE)
data.names <- as.character(c(paste0(data.names$month, "_", data.names$year)))
uj5u.com熱心網友回復:
你可以paste在outer.
r <- as.vector(outer(month.name[6:9], 1984:2017, paste, sep='_'))
給
head(r)
# [1] "June_1984" "July_1984" "August_1984" "September_1984" "June_1985" "July_1985"
stopifnot(all.equal(r, data.names))
uj5u.com熱心網友回復:
我們可能會使用rep
out <- paste0(month.name[6:9], "_", rep(1984:2017, each = 4))
- 使用 OP 的代碼進行測驗
> out_prev <- as.character(c(paste0(data.names$month, "_", data.names$year)))
> identical(out, out_prev)
[1] TRUE
uj5u.com熱心網友回復:
這是一個dplyr解決方案:
library(dplyr)
vector_data.names <- data.names %>%
mutate(data.names = paste(month, year, sep = "_")) %>%
pull(data.names)
vector_data.names
[1] "June_1984" "July_1984" "August_1984" "September_1984" "June_1985"
[6] "July_1985" "August_1985" "September_1985" "June_1986" "July_1986"
[11] "August_1986" "September_1986" "June_1987" "July_1987" "August_1987"
[16] "September_1987" "June_1988" "July_1988" "August_1988" "September_1988"
[21] "June_1989" "July_1989" "August_1989" "September_1989" "June_1990"
[26] "July_1990" "August_1990" "September_1990" "June_1991" "July_1991"
[31] "August_1991" "September_1991" "June_1992" "July_1992" "August_1992"
[36] "September_1992" "June_1993" "July_1993" "August_1993" "September_1993"
[41] "June_1994" "July_1994" "August_1994" "September_1994" "June_1995"
[46] "July_1995" "August_1995" "September_1995" "June_1996" "July_1996"
[51] "August_1996" "September_1996" "June_1997" "July_1997" "August_1997"
[56] "September_1997" "June_1998" "July_1998" "August_1998" "September_1998"
[61] "June_1999" "July_1999" "August_1999" "September_1999" "June_2000"
[66] "July_2000" "August_2000" "September_2000" "June_2001" "July_2001"
[71] "August_2001" "September_2001" "June_2002" "July_2002" "August_2002"
[76] "September_2002" "June_2003" "July_2003" "August_2003" "September_2003"
[81] "June_2004" "July_2004" "August_2004" "September_2004" "June_2005"
[86] "July_2005" "August_2005" "September_2005" "June_2006" "July_2006"
[91] "August_2006" "September_2006" "June_2007" "July_2007" "August_2007"
[96] "September_2007" "June_2008" "July_2008" "August_2008" "September_2008"
[101] "June_2009" "July_2009" "August_2009" "September_2009" "June_2010"
[106] "July_2010" "August_2010" "September_2010" "June_2011" "July_2011"
[111] "August_2011" "September_2011" "June_2012" "July_2012" "August_2012"
[116] "September_2012" "June_2013" "July_2013" "August_2013" "September_2013"
[121] "June_2014" "July_2014" "August_2014" "September_2014" "June_2015"
[126] "July_2015" "August_2015" "September_2015" "June_2016" "July_2016"
[131] "August_2016" "September_2016" "June_2017" "July_2017" "August_2017"
[136] "September_2017"
uj5u.com熱心網友回復:
為了完整起見,這里有一個“單線”,它使用包中的CJ()(交叉連接)功能data.table:
data.table::CJ(month.name[6:9], 2014:2017)[, paste(V1, V2, sep = "_")]
[1] "August_2014" "August_2015" "August_2016" "August_2017" "July_2014" "July_2015" [7] "July_2016" "July_2017" "June_2014" "June_2015" "June_2016" "June_2017" [13] "September_2014" "September_2015" "September_2016" "September_2017"
請注意,已縮小年份范圍以進行演示。
輸出按照 OP 在注釋中的要求按字母順序排序CJ(),默認情況下對其輸出進行排序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/468112.html
