gpt4 book ai didi

r - 具有混合数据类型的数据框

转载 作者:行者123 更新时间:2023-12-04 17:36:51 26 4
gpt4 key购买 nike

我已经使用 R 一段时间了,但我仍然在为因子和数据框而苦苦挣扎。
这是我的问题。

我正在尝试预先分配由几列不同类型组成的数据框,如下所示:

cb <- data.frame(S=character(1000), I=numeric(1000), A=as.Date(rep(0,1000), origin = "1900-01-01"), SD=as.POSIXct(rep(0,1000), origin = "1900-01-01 00:00:00"), CC=numeric(1000), stringsAsFactors=FALSE)

它满足了我想要的数据帧类型(str(cb) 的输出):
'data.frame':   1000 obs. of  5 variables:
$ S : chr "" "" "" "" ...
$ I : num 0 0 0 0 0 0 0 0 0 0 ...
$ A : Date, format: "1900-01-01" "1900-01-01" "1900-01-01" "1900-01-01" ...
$ SD: POSIXct, format: "1900-01-01" "1900-01-01" "1900-01-01" "1900-01-01" ...
$ CC: num 0 0 0 0 0 0 0 0 0 0 ...

当我分配数据框中的第一项时,CC 和我变成了字符:
cb[1, ] <- c("ABCD", 4, "2005-12-12", "2008-04-03 20:30", 3)

str(cb) 的输出:
'data.frame':   1000 obs. of  5 variables:
$ S : chr "ABCD" "" "" "" ...
$ I : chr "4" "0" "0" "0" ...
$ A : Date, format: "2005-12-12" "1900-01-01" "1900-01-01" "1900-01-01" ...
$ SD: POSIXct, format: "2008-04-03 20:30:00" "1900-01-01 00:00:00" "1900-01-01 00:00:00" "1900-01-01 00:00:00" ...
$ CC: chr "3" "0" "0" "0" ...

这使得它无法用于我的目的。

当我在 data.frame 定义中省略 stringsAsFactors=FALSE 时,我(显然)收到一条不同的错误消息(将警告设置为 2):
Error in `[<-.factor`(`*tmp*`, iseq, value = "ABCD") : 
(converted from warning) invalid factor level, NAs generated

我明白,但我也不知道如何克服。

我究竟做错了什么?如何确保保留 I 和 SD 列的数字类型?
非常感谢你的帮助。

干杯

最佳答案

您不能在向量中混合类型,因此您的向量被强制转换为字符。

R> c("ABCD", 4, "2005-12-12", "2008-04-03 20:30", 3)
[1] "ABCD" "4"
[3] "2005-12-12" "2008-04-03 20:30"
[5] "3"
[<-.data.frame然后将 data.frame 的数字列强制为字符,因此该列将是一种类型;虽然我发现它有点不一致,它也不会将日期/POSIXt 字段转换为字符......

您可以在列表中混合类型。这种替换是有效的,因为 data.frames 是下面的列表。
cb[1, ] <- list("ABCD", 4, "2005-12-12", "2008-04-03 20:30", 3)

当您稍后回顾您的代码时,用 1 行 data.frame 替换一行 data.frame 可能更有意义:
cb[1, ] <- data.frame("ABCD", 4, "2005-12-12", "2008-04-03 20:30", 3,
stringsAsFactors=FALSE)

关于r - 具有混合数据类型的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16025388/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com