将r中数据帧中的数字替换为字母

将r中数据帧中的数字替换为字母,r,if-statement,R,If Statement,基本上,我在数据框中有一列,如: df <- data.frame(well = c("0","1",NA,"1","1","2","2","3","4","3")) 我只想通过将0替换为a、1替换为B、…、7替换为H来创建一个新列。 我尝试过这个,但没有成功: lxn <- data.frame(old_name = c(0,1,2,3,4,5,6,7), new_name = c("A","B","C","D","E","F","G","H")

基本上,我在数据框中有一列,如:

df <- data.frame(well = c("0","1",NA,"1","1","2","2","3","4","3"))
我只想通过将0替换为a、1替换为B、…、7替换为H来创建一个新列。 我尝试过这个,但没有成功:

lxn <-  data.frame(old_name = c(0,1,2,3,4,5,6,7), 
               new_name = c("A","B","C","D","E","F","G","H"))
map <- lxn$new_name
names(map) <- lxn$old_name
df <- df %>% mutate(well_l = ifelse(well %in% names(map), 
                     map[well], 
                     well)) 
如果你尝试一下,你可以看到输出基本上是井数+1。我不知道为什么我没有检索字母new_name并获取well+1的编号


希望有人能帮助我

可以使用内置的常量字母

不需要循环:

df <- data.frame(well = c("0","1",NA,"1","1","2","2","3","4","3"))

lxn <-  data.frame(old_name = c(0,1,2,3,4,5,6,7), 
                   new_name = c("A","B","C","D","E","F","G","H"))

df %>%
  mutate(well = set_names(lxn$new_name, lxn$old_name)[well])

# well
# 1     A
# 2     B
# 3  <NA>
#   4     B
# 5     B
# 6     C
# 7     C
# 8     D
# 9     E
# 10    D

mergedf,lxn,by.x='well',by.y='old_name',all.x=truet值得注意的是,这依赖于因子整数代码。如果它是一个字符向量,如果不转换成数字并加上1,它显然是不起作用的。谢谢,我的数据有字符向量,所以为了避免过于复杂,我使用了r.user.05apr提供的代码。它使用dplyr实现了这个技巧,这正是我想要的。非常感谢。非常感谢,您的简单代码足以解决我的问题!
df <- data.frame(well = c("0","1",NA,"1","1","2","2","3","4","3"))

lxn <-  data.frame(old_name = c(0,1,2,3,4,5,6,7), 
                   new_name = c("A","B","C","D","E","F","G","H"))

df %>%
  mutate(well = set_names(lxn$new_name, lxn$old_name)[well])

# well
# 1     A
# 2     B
# 3  <NA>
#   4     B
# 5     B
# 6     C
# 7     C
# 8     D
# 9     E
# 10    D