将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