在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
遍历列后,我们可以将 ifelse
与 paste
一起使用
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_)))
我有一个如下所示的数据框:
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
ifelse
与 paste
一起使用
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_)))