R 映射列值

R 映射列值,r,replace,map,dataframe,transform,R,Replace,Map,Dataframe,Transform,我想使用一些映射函数来转换给定列的值。例如: df <- data.frame(A = 1:5, B = sample(1:20, 10)) df A B 1 1 17 2 2 5 3 3 3 4 4 11 5 5 19 6 1 16 7 2 4 8 3 7 9 4 6 10 5 9 我写了以下内容: 1 -> "tt" 2 -> "ff" 3 -> "ss" 4 -> "fs" 5 -> "sf" mappingLi

我想使用一些映射函数来转换给定列的值。例如:

df <- data.frame(A = 1:5, B = sample(1:20, 10))
df
   A  B
1  1 17
2  2  5
3  3  3
4  4 11
5  5 19
6  1 16
7  2  4
8  3  7
9  4  6
10 5  9
我写了以下内容:

1 -> "tt"
2 -> "ff"
3 -> "ss"
4 -> "fs"
5 -> "sf"
mappingList <- c("tt", "ff", "ss", "fs", "sf")
df$A <- unlist(lapply(df$A, function(x){replace(x, x>0, mappingList[x])}))
df
  A  B
1  tt 17
2  ff  5
3  ss  3
4  fs 11
5  sf 19
6  tt 16
7  ff  4
8  ss  7
9  fs  6
10 sf  9

mappingList您是否查看了
因子

df$A_2 <- factor(df$A, levels = 1:5, labels = c("tt", "ff", "ss", "fs", "sf"))
df
#    A  B A_2
# 1  1 17  tt
# 2  2  5  ff
# 3  3  3  ss
# 4  4 11  fs
# 5  5 19  sf
# 6  1 16  tt
# 7  2  4  ff
# 8  3  7  ss
# 9  4  6  fs
# 10 5  9  sf
尝试:

对于其他两个数据集:

df1 <-  data.frame(A = paste("str",1:5,sep=""), B = sample(1:20, 10))
df2 <- data.frame(A = seq(5, 25, by=5), B = sample(1:20, 10))

mappingList[as.numeric(df1$A)]
#[1] "tt" "ff" "ss" "fs" "sf" "tt" "ff" "ss" "fs" "sf"

mappingList[as.numeric(factor(df2$A))]
#[1] "tt" "ff" "ss" "fs" "sf" "tt" "ff" "ss" "fs" "sf"

df1特别是
df$非常好,我喜欢使用命名向量的查找表思想。非常感谢阿南达@Riad,SO用户的相关读数:
df$A_2 <- factor(df$A, levels = 1:5, labels = c("tt", "ff", "ss", "fs", "sf"))
df
#    A  B A_2
# 1  1 17  tt
# 2  2  5  ff
# 3  3  3  ss
# 4  4 11  fs
# 5  5 19  sf
# 6  1 16  tt
# 7  2  4  ff
# 8  3  7  ss
# 9  4  6  fs
# 10 5  9  sf
df <- data.frame(A = paste("str",1:5,sep=""), B = sample(1:20, 10))

NamedVec <- setNames(paste("str",1:5,sep=""), c("tt", "ff", "ss", "fs", "sf"))
NamedVec
#     tt     ff     ss     fs     sf
# "str1" "str2" "str3" "str4" "str5" 
NamedVec[df$A]
#     tt     ff     ss     fs     sf     tt     ff     ss     fs     sf 
# "str1" "str2" "str3" "str4" "str5" "str1" "str2" "str3" "str4" "str5" 
names(NamedVec[df$A])
#  [1] "tt" "ff" "ss" "fs" "sf" "tt" "ff" "ss" "fs" "sf"
mappingList[df$A]
#[1] "tt" "ff" "ss" "fs" "sf" "tt" "ff" "ss" "fs" "sf"
df1 <-  data.frame(A = paste("str",1:5,sep=""), B = sample(1:20, 10))
df2 <- data.frame(A = seq(5, 25, by=5), B = sample(1:20, 10))

mappingList[as.numeric(df1$A)]
#[1] "tt" "ff" "ss" "fs" "sf" "tt" "ff" "ss" "fs" "sf"

mappingList[as.numeric(factor(df2$A))]
#[1] "tt" "ff" "ss" "fs" "sf" "tt" "ff" "ss" "fs" "sf"