【发布时间】:2014-03-27 21:38:30
【问题描述】:
我正在使用共享几个相似列的两个数据帧的列表,我希望能够使用它们的列名而不是列位置一次性转换每个数据帧中多个列的类。
我搜索了 StockOverflow 并在此处找到了类似的问题:此处:Using lists to change columns in multiple dataframes in R 和此处:applying a function for a list of dataframes。但是,我被困在尝试使用多个列名来转换日期。 这是一个示例数据来说明我的问题:
df1 <- data.frame("t1" = c(20070103, 20070104, 20070105, 20070108, 20070109), "t2" = c(20070110,20070111, 20070112, 20070113, 20070114), A = 1:5)
df2 <- data.frame("t1" = c(20080103, 20080104, 20080105, 20080108, 20080109), "t2" = c(20080110,20080111, 20080112, 20080113, 20080114), B = 1:5)
l <- list(df1 = df1, df2=df2)
到目前为止,我已经找到了两个解决方案,我可以对要转换为日期的每一列重复这些解决方案:
#1
l2 <-lapply(l, function(x) transform(x, t1 = as.Date(as.character(t1), "%Y%m%d")))
#2
f <- function(df){
within(df, t1 <- as.date(date))
}
l2 <- lapply(l, f)
但是,有没有办法我可以使用任何一种方法一次获取多个列(不是整个数据框或列表)并使用列名?我尝试了以下代码无济于事:
periods <- c( "t1", "t2" )
ls2 <-lapply(ls, function(x) transform(x, periods = as.Date(as.character(periods), "%Y%m%d"))
f <- function(df) {
within(df, t1 <- as.Date(as.character(t1), "%Y%m%d"))
within(df, t2 <- as.Date(as.character(t2), "%Y%m%d"))
}
l2 <- lapply(l, f)
for (i in periods)
l2 <-lapply(l, function(x) transform(x, i = as.Date(as.character(i), "%Y%m%d")))
【问题讨论】:
-
这很容易。您希望如何以编程方式标识您的列?
-
您对我们可以帮助解决的 apply 概念也存在根本性的误解。
-
我是 R 新手,所以我不确定我是否在回答你的问题,但我只想指定我想转换为日期的列的名称。我可以在我的函数中或通过使用 lapply 使用字符向量“句点”吗?
标签: r