2015-11-04 33 views
0

我已經獲得了格式化的大數據,我想將其融化併爲年,月和日添加一個新變量。我寫的for循環有點慢,我正在尋找更快的東西。融化後將年,月,日變量添加到data.frame中

dput:

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)) 

熔體和循環:

# 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)) 
} 

回答

3

你不需要循環。試試這個:

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

感謝您的幫助......這會更容易:) – Vedda