我想合并两个数据表,但它们中的一个列ddatePOSIXct类,另一种具有柱ddateDate类。

我希望结果数据表具有POSIXct类,但实际结果取决于传递给rbind的参数序列:

zz1 <- "or,d,ddate,rdate,changes,class,price,fdate,company,number,minutes,added,source
VA1,VA2,2014-05-24,,0,0,2124,2014-05-22 15:50:16,,,,2014-05-22 12:20:03,ss
VA1,VA2,2014-05-26,,0,0,2124,2014-05-22 15:03:44,,,,2014-05-22 12:20:03,s1
VA1,VA2,2014-06-05,,0,0,2124,2014-05-22 15:48:24,,,,2014-05-22 12:20:03,s1
VA1,VA2,2014-06-09,,0,0,2124,2014-05-22 15:37:35,,,,2014-05-22 12:20:03,s2
VA1,VA2,2014-06-16,,0,0,2124,2014-05-22 14:17:33,,,,2014-05-22 12:20:03,ss"

zz2 <- "or,d,ddate,rdate,changes,class,price,fdate,company,number,minutes,added,source
VA3,VA4,2014-05-24 12:23:00,,0,0,2124,2014-05-22 15:50:16,,,,2014-05-22 12:20:03,ss
VA1,VA2,2014-05-26 14:00:01,,0,0,2124,2014-05-22 15:03:44,,,,2014-05-22 12:20:03,s1
VA5,VA6,2014-06-05 18:00:04,,0,0,2124,2014-05-22 15:48:24,,,,2014-05-22 12:20:03,s1
VA7,VA8,2014-06-09 18:00:07,,0,0,2124,2014-05-22 15:37:35,,,,2014-05-22 12:20:03,s2
VA9,VA0,2014-06-16 19:00:20,,0,0,2124,2014-05-22 14:17:33,,,,2014-05-22 12:20:03,ss"

columnClasses <- c("factor", "factor", "Date", "factor", "integer", "factor", "integer", "factor", "factor", "factor", "integer", "factor", "factor")
dt1 <- read.table(text=zz1, header = TRUE, sep = ",", comment.char = "", quote = "", na.strings = c(""), colClasses = columnClasses)

columnClasses <- c("factor", "factor", "POSIXct", "factor", "integer", "factor", "integer", "factor", "factor", "factor", "integer", "factor", "factor")
dt2 <- read.table(text=zz2, header = TRUE, sep = ",", comment.char = "", quote = "", na.strings = c(""), colClasses = columnClasses)

dt <- rbind(dt1, dt2)
class(dt$ddate) # [1] "Date"

dt <- rbind(dt2, dt1)
class(dt$ddate) # [1] "POSIXct" "POSIXt"

我该怎么做才能始终拥有POSIXct 由于当我从CSV文件中获取数据时无法控制顺序,如下所示:

tables <- lapply(files, readCSVFile)
dt <- rbindlist(tables, fill = TRUE)

#1楼 票数:3 已采纳

我认为您可以在使用read.csv加载时处理每个文件,以便将ddate变量转换为POSIXct 这样可以更好地控制合并。 这可以通过创建要由lapply使用的自己的函数来实现。

ddate.convert = function(x){tmp <- readcsv(x); tmp$ddate <- as.POSIXct(tmp$ddate); tmp}
tables <- lapply(files, FUN=ddate.convert)
dt <- rbindlist(tables, fill = TRUE)

  ask by LA_ translate from so

未解决问题?本站智能推荐:

1回复

R:如何使用rbind在数据表上保留行名

我丢失了数据的行名。 当在数据表上使用rbind函数时,似乎会发生这种情况。 这是显示应该发生的情况的示例 输出是 使用数据表时,行名会丢失 带数据表输出 应该如何修改代码以保留行名?
1回复

使用数据表的Setorder,可能无法工作posixct毫秒

我想用setorder对数据表进行排序。 输出: Setorder无法正确排序数据表,我不确定为什么。 是否有可能以某种方式提高灵敏度或其他解决方案?
1回复

带有POSIXct上的trunc的R数据表

在这里无法弄清楚我在做什么错。 在“天”列中给我一个长度为9的列表? 给我一个长度为25的向量。 在“ day.test”列中再次给我一个长度为9的列表?
1回复

为什么对于增长数据表,“rbind”的工作要比“set”更快?

我正在研究一个需要读入并合并大量数据表的模型。 虽然数据表将具有相同的列和相同的标题,但每个数据表将具有不同数量的行。 我当前执行此操作的方法效率低下,并且取决于要合并的数据表的数量,可能需要几个小时。 我目前的方法是使用rbind组合数据表。 以下是可重现的示例,其中的数据集要小得多
1回复

R舍入数据表中的PosixCT变量

以下代码使用POSIXct格式的一个变量timeStamp创建一个10行数据表。 我想将timeStamp舍入到最近的分钟。 此命令在timeStamp2的每一行中放置一个列表,而不是修改POSIXct变量。 下面的代码行执行我想要的(在此示例中向上舍入)但在数据表中不起作用。
1回复

合并两个数据表,但避免重复的列

我有两个数据表, dat和dat2 。 尽管两个表中的值不一定相同,但两个表中都有几列。 当我使用dat[dat2]合并两个表时,除了我有一些重复的列名之外,其他所有东西都按预期工作。 例如,两个表中都出现一个名为Status的列,合并后, dat2中的列dat2显示为i.Status
1回复

使用R中的data.table将POSIXct列连接到Date列

在以下示例中,有人可以向我解释为什么2015-03-31的日期更改为1034-04-03? 我的目的是让date从dt1到dt2的Date格式,而不是POSIXct由id (不同的id会有不同的date )。 我该怎么办? 以下是我想要的: 编辑 : 我尝试过以下方法: 不
2回复

使用数据表将一个函数应用于具有参数值向量的多列

我想将一个函数应用于多列,对一个参数使用不同值的向量。 我有一些数据: 我想创建将 n 添加到 a 和 b 的列。 输出将如下所示: 这篇文章详细介绍了如何将一个函数应用于多个列,我知道该怎么做。 我不知道的是如何将相同的函数应用于多列,用 n 代替 1。