【发布时间】:2016-09-04 06:26:47
【问题描述】:
我有一个包含许多时间列的数据框。我想为年、月、日等每次添加列。
这是我目前所拥有的:
library(dplyr)
library(lubridate)
times <- c(133456789, 143456789, 144456789 )
train2 <- data.frame(sent_time = times, open_time = times)
time_col_names <- c("sent_time", "open_time")
dt_part_names <- c("year", "month", "hour", "wday", "day")
train3 <- as.data.frame(train2)
dummy <- lapply(time_col_names, function(col_name) {
pct_times <- as.POSIXct(train3[,col_name], origin = "1970-01-01", tz = "GMT")
lapply(dt_part_names, function(part_name) {
part_col_name <- paste(col_name, part_name, sep = "_")
train3[, part_col_name] <- rep(NA, nrow(train3))
train3[, part_col_name] <- factor(get(part_name)(pct_times))
})
})
似乎一切正常,除了列从未被创建或分配。组件确实被提取,并且分配成功且没有错误,但 train3 没有任何新列。
当我在嵌套的 lapply 上下文之外调用它时,我检查了该分配是否有效:
train3[, "x"] <- rep(NA, nrow(train3))
在这种情况下,确实会创建列 x。
【问题讨论】:
-
@akrun - 定义 train2 并清理代码以最小化重现