熔化后data.frame增加年月日变量

Add year, month, day variable to data.frame after melt

我有宽格式数据,我想融合这些数据并为年、月和日添加一个新变量。我写的 for 循环有点慢,我正在寻找更快的东西。

输出:

df <- structure(list(id = c("USC00030150", "USC00030150"), year = c(1900L, 
1900L), month = c("01", "01"), element = c("TMAX", "TMIN"), d01 = c(22L, 
-50L), d02 = c(22L, -83L), d03 = c(56L, -100L), d04 = c(106L, 
-33L), d05 = c(189L, 61L), d06 = c(117L, 67L), d07 = c(133L, 
94L), d08 = c(144L, 78L), d09 = c(133L, 100L), d10 = c(133L, 
117L), d11 = c(100L, 89L), d12 = c(122L, -11L), d13 = c(156L, 
-6L), d14 = c(194L, 22L), d15 = c(206L, 117L), d16 = c(194L, 
122L), d17 = c(139L, 117L), d18 = c(61L, 56L), d19 = c(56L, 6L
), d20 = c(172L, 17L), d21 = c(122L, -11L), d22 = c(189L, 0L), 
    d23 = c(206L, 61L), d24 = c(183L, 89L), d25 = c(72L, 56L), 
    d26 = c(33L, -33L), d27 = c(67L, -17L), d28 = c(22L, 0L), 
    d29 = c(17L, -111L), d30 = c(94L, -67L), d31 = c("28  6", 
    "-33  6")), .Names = c("id", "year", "month", "element", 
"d01", "d02", "d03", "d04", "d05", "d06", "d07", "d08", "d09", 
"d10", "d11", "d12", "d13", "d14", "d15", "d16", "d17", "d18", 
"d19", "d20", "d21", "d22", "d23", "d24", "d25", "d26", "d27", 
"d28", "d29", "d30", "d31"), class = c("tbl_df", "data.frame"
), row.names = c(NA, -2L))

熔化和 for 循环:

# Melt to aggregate data
df2 <- melt(df, id = c("id", "year", "month", "element"))

for (i in 1:nrow(df2)) {
df2$date[i] <- paste0(df2$year[i], df2$month[i], substr(df2$variable[i], 2,3))
}

您不需要循环。试试这个:

df2$date <- paste0(df2$year, df2$month, substr(df2$variable, 2,3))