【发布时间】:2022-01-12 14:43:34
【问题描述】:
我只是想知道 R 是否有办法将字符串向量转换为我定义的数字。例如,假设我们有一个向量如下:
vector <- c("ABC", "DEF", "GHI", "ABC", "GHI", "ABC")
我想做的不是在向量中包含元素ABC、DEF 和GHI,而是希望用用户定义的数字“交换”它们,这样而不是在向量中有ABC 我有1,而不是DEF 我有2,而不是GHI 我有3,所以向量现在变成了
vector <- c(1, 2, 3, 1, 3, 1)
我知道有些函数可以做与此类似的事情,但它们并不能完全满足我的要求。例如,函数as.numeric(as.factor()) 会将一个填充了字符串元素的向量转换为数字,这正是我想要的,但不幸的是它不允许我实际定义什么字符串值变成什么数字,这将是一个主要问题,当我正在使用更改的数据集,因为数字将代表不同的字符串。
另一种替代方法是使用chartr(old = "ABC", new = "123", x) 函数(其中x 是您的数据集),这也很好,但其背后的主要问题是“旧”字符的数量必须与“新”字符,而且字母的每个实例都将更改为一个数字,因此,如果我们将 ABC 替换为 123 ,那么每次出现 B 时,它将始终替换为 2不是我想要的。
R 是否有一个函数可以让我用用户定义的数字交换向量中的字符串?
编辑:特别是(对于希望将来这样做的任何人),我使用了以下函数:levels(vector)[levels(vector)=="ABC"] <- "1" 这允许您将单个字符串因子级别与数值交换,反之亦然
【问题讨论】:
-
使用
factor并指定其levels -
这正是我需要的!谢谢,您能否将其放入回复中,以便我接受它作为答案?
-
特别是(对于希望将来这样做的任何人),我使用了以下函数:
levels(vector)[levels(vector)=="ABC"] <- "1"这允许您将单个字符串因子级别与数值交换,反之亦然跨度> -
@ThePlowKing - 不需要一一做,只需:
as.numeric(factor(vector, levels=c("ABC","DEF","GHI")))应该做。或者c(9,6,3)[factor(vector, levels=c("ABC","DEF","GHI"))],如果你想要你选择的完全任意的数值,不必是连续的。 -
我意识到我上面评论中的第一段代码本质上是
as.numeric(factor())- 不同之处在于您可以重新排列levels=以明确更改顺序。