在多个列中将数字替换为字符串,R

4

我有几列数据,其中某些数字对应不同的值。我只想在前三列中替换它们。

A1   A2   A3   A4   A5
1    3    NA    5   2
1    2    1     2   1
3    NA   NA    1   8
2    1    NA    1   12

1=cat
2=dog
3=rabbit

so I would like the output to be:

A1       A2       A3     A4     A5
cat     rabbit    NA     5      2
cat     dog       cat    2      1
rabbit  NA        NA     1      8
dog     cat       NA     1      12

我知道如何替换单个列中的数字,但我想学习一种更容易一次性替换多个数字的方法。谢谢!


df[1:3] <- lapply(df[1:3], function(i) fun_to_replace...) - Sotos
2个回答

3

使用 dplyr

代码:

df %>% 
  mutate(across(1:3,
                ~ case_when(
                  . == 1 ~ "cat",
                  . == 2 ~ "dog",
                  . == 3 ~ "rabbit",
                  TRUE ~ NA_character_
                )))

输出:

       A1     A2     A3    A4    A5
   <char> <char> <char> <int> <int>
1:    cat rabbit   <NA>     5     2
2:    cat    dog    cat     2     1
3: rabbit   <NA>   <NA>     1     8
4:    dog    cat   <NA>     1    12

数据:

df <- structure(list(A1 = c(1L, 1L, 3L, 2L), A2 = c(3L, 2L, NA, 1L), 
    A3 = c(NA, 1L, NA, NA), A4 = c(5L, 2L, 1L, 1L), A5 = c(2L, 
    1L, 8L, 12L)), row.names = c(NA, -4L), class = c("data.table", 
"data.frame"), .internal.selfref = <pointer: 0x00000222c4081ef0>)

太棒了!在R基础环境下可以实现吗? - stats_noob

2
在 R 的基础语言中,如果数值是数字类型,则使用这些数值作为索引进行替换。
df[1:3] <- c("cat", "dog", "rabbit")[as.matrix(df[1:3])]

-输出

> df
      A1     A2   A3 A4 A5
1    cat rabbit <NA>  5  2
2    cat    dog  cat  2  1
3 rabbit   <NA> <NA>  1  8
4    dog    cat <NA>  1 12

数据

df <- structure(list(A1 = c(1L, 1L, 3L, 2L), A2 = c(3L, 2L, NA, 1L), 
    A3 = c(NA, 1L, NA, NA), A4 = c(5L, 2L, 1L, 1L), A5 = c(2L, 
    1L, 8L, 12L)), class = "data.frame", row.names = c(NA, -4L
))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接