在R中数据框中的每个数值前添加字母

add letter before each numerical value in the data frame in R

我有一个如下所示的数据框:

df <- data.frame(a=c(1,1,2,NA,1),
                 b=c(2,3,3,NA,6),
                 c=c(1,NA,1,1,1),
                 d=c(2,2,3,1,1),
                 e=c(1,2,1,2,1))
head(df)
  a  b  c d e
1  1  2  1 2 1
2  1  3 NA 2 2
3  2  3  1 3 1
4 NA NA  1 1 2
5  1  6  1 1 1

我想为每个值添加字符“Q”,但不适用。例如,所需的输出将如下所示:

    a    b    c  d  e
1   Q1   Q2   Q1 Q2 Q1
2   Q1   Q3 <NA> Q2 Q2
3   Q2   Q3   Q1 Q3 Q1
4 <NA> <NA>   Q1 Q1 Q2
5   Q1   Q6   Q1 Q1 Q1

我正在尝试以下代码行:df[] <- sub("^", "Q", df[]),但它没有产生所需的输出。

感谢您的帮助! 奥尔哈

在使用 lapply

遍历列后,我们可以将 ifelsepaste 一起使用
df[] <- lapply(df, function(x) ifelse(!is.na(x), paste0("Q", x), x))

-输出

df
#     a    b    c  d  e
#1   Q1   Q2   Q1 Q2 Q1
#2   Q1   Q3 <NA> Q2 Q2
#3   Q2   Q3   Q1 Q3 Q1
#4 <NA> <NA>   Q1 Q1 Q2
#5   Q1   Q6   Q1 Q1 Q1

或者也可以在赋值的两边用逻辑索引来完成

df[!is.na(df)] <-  paste0("Q", df[!is.na(df)])

注意:

sub 需要 vector 作为 'x' 的输入而不是 data.frame。在这里,使用 paste 而不是 sub

更容易

或者用dplyr

library(dplyr)
library(stringr)
df %>%
   mutate(across(everything(), 
       ~ case_when(!is.na(.) ~ str_c('Q', .), TRUE ~ NA_character_)))