将数据框架列中的整数替换为R?

  • 本文关键字:替换 整数 数据 框架 r vector
  • 更新时间 :
  • 英文 :


我想将数据框中仅包含4个数字的向量替换为如下所示的特定数字

tt <- rep(c(1,2,3,4), each = 10)
df <- data.frame(tt)

我想替换1 = 10; 2 = 200, 3 = 458, 4 = -0.1

您可以使用dplyr中的recode。注意,旧的值被写成字符。并且由于原始列是整数,所以新值是整数:

library(tidyverse):
df %>% 
mutate(tt = recode(tt, '1'= 10, '2' = 200, '3' = 458, '4' = -0.1))
tt
1  10.0
2  10.0
3 200.0
4 200.0
5 458.0
6 458.0
7  -0.1
8  -0.1

为了纠正问题中代码中的错误并提供一个更短的示例,我们使用了末尾注释中的输入。这里有几个选择。在(1)中定义的nos也用于其他一些。没有使用包。

1)索引由于输入是1到4,为了得到结果,我们可以使用索引。这可能是最简单的解决方案,因为tt的原始值是1:4。

nos <- c(10, 200, 458, -0.1)
transform(df, tt = nos[tt])
##      tt
## 1  10.0
## 2  10.0
## 3 200.0
## 4 200.0
## 5 458.0
## 6 458.0
## 7  -0.1
## 8  -0.1

1)如果输入不一定是1:4那么我们可以使用这个泛化

transform(df, tt = nos[match(tt, 1:4)])

2)算术另一种方法是使用算术:

transform(df, tt = 10 * (tt == 1) + 
200 * (tt == 2) + 
458 * (tt == 3) +
-0.1 * (tt == 4))

3)外/矩阵乘法这也可以:

transform(df, tt = c(outer(tt, 1:4, `==`) %*% nos))

3)这是相同的,除了我们使用模型。矩阵代替外部

transform(df, tt = c(model.matrix(~ factor(tt) + 0, df) %*% nos))
<<p>4)因素/strong>因子的水平为1:4,对应的标签由nos定义。使用format提取标签,然后将其转换为数字。
transform(df, tt = as.numeric(format(factor(tt, levels = 1:4, labels = nos))))

4 a)或者作为管道

transform(df, tt = tt |> 
factor(levels = 1:4, labels = nos) |>
format() |>
as.numeric())

5)循环我们可以使用一个简单的循环。在末尾将i空,这样它就不会被做成一列。

within(df, { for(i in 1:4) tt[tt == i] <- nos[i]; i <- NULL })

6)减少这有点类似于(5),但使用Reduce实现循环。

fun <- function(tt, i) replace(tt, tt == i, nos[i])
transform(df, tt = Reduce(fun, init = tt, 1:4))

注意

df <- data.frame(tt = c(1, 1, 2, 2, 3, 3, 4, 4))

最新更新