gpt4 book ai didi

r - 如何阻止合并将字符转换为因子?

转载 作者:行者123 更新时间:2023-12-04 08:41:53 26 4
gpt4 key购买 nike

例如。

chr <- c("a", "b", "c")
intgr <- c(1, 2, 3)
str(chr)
str(base::merge(chr,intgr, stringsAsFactors = FALSE))

给出:
> str(base::merge(chr,intgr, stringsAsFactors = FALSE))
'data.frame': 9 obs. of 2 variables:
$ x: Factor w/ 3 levels "a","b","c": 1 2 3 1 2 3 1 2 3
$ y: num 1 1 1 2 2 2 3 3 3

我最初认为这与合并如何将参数强制转换为数据帧有关。但是,我认为添加参数 stringsAsFactors = FALSE将覆盖 char -> factor 的默认强制行为,但这不起作用。

编辑 :做以下给我预期的行为:
options(stringsAsFactors = FALSE)
str(base::merge(chr,intgr))

那是:
> str(base::merge(chr,intgr))
'data.frame': 9 obs. of 2 variables:
$ x: chr "a" "b" "c" "a" ...
$ y: num 1 1 1 2 2 2 3 3 3

但这并不理想,因为它改变了全局 stringsAsFactors环境。

最佳答案

您可以使用 expand.grid() 完成这个特殊的“合并”。 ,因为您实际上只是采用笛卡尔积。这允许您通过 stringsAsFactors争论:

sapply(expand.grid(x=chr,y=intgr,stringsAsFactors=F),class);
## x y
## "character" "numeric"

这是一种解决 merge() 限制的方法:
sapply(merge(data.frame(x=chr,stringsAsFactors=F),intgr),class);
## x y
## "character" "numeric"

我认为将原子向量传递给 merge() 永远没有意义。 ,因为它只是真正设计用于合并 data.frames。

关于r - 如何阻止合并将字符转换为因子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37980046/

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