根据R中的条件重命名因子级别
假设我们有以下数据帧:根据R中的条件重命名因子级别,r,dataframe,rename,R,Dataframe,Rename,假设我们有以下数据帧: data1 <- data.frame(S1 = sample(c("A", "B", "C"), size = 20, replace = TRUE), S2 = sample(c("A", "B", "C"), size = 20, replace = TRUE), number = rnorm(20, 10, 100)) 我想知道是否还有其他(更像R的)方法可以做到这一点 一种方
data1 <- data.frame(S1 = sample(c("A", "B", "C"), size = 20, replace = TRUE),
S2 = sample(c("A", "B", "C"), size = 20, replace = TRUE),
number = rnorm(20, 10, 100))
我想知道是否还有其他(更像R的)方法可以做到这一点 一种方法是建立一个包含所有“场景”及其映射的列表
change_list <- list(scenario1 = c("A"="a1", "B"="b1", "C"="c1"),
scenario2 = c("A"="something", "B"="completely", "C"="different"),
scenario3 = c("A"="z2", "B"="d3", "C"="p14"))
这样,只需使用一个函数,就可以更改任何列中的所有值
changer_1 <- c("A"="a1", "B"="b1", "C"="c1")
changer_2 <- c("A"="something", "B"="completely", "c"="different")
changer_3 <- c("A"="z2", "B"="d3", "c"="p14")
if(scenario=="scenario1"){
data1$S1 <- revalue(data1$S1, changer_1)
data1$S2 <- revalue(data1$S2, changer_1)
} else if (scenario=='scenario2'){
data1$S1 <- revalue(data1$S1, changer_2)
data1$S2 <- revalue(data1$S2, changer_2)
} else {
data1$S1 <- revalue(data1$S1, changer_3)
data1$S2 <- revalue(data1$S2, changer_3)
}
change_list <- list(scenario1 = c("A"="a1", "B"="b1", "C"="c1"),
scenario2 = c("A"="something", "B"="completely", "C"="different"),
scenario3 = c("A"="z2", "B"="d3", "C"="p14"))
get_values <- function(change_list, scenario, x) {
change_list[[scenario]][x]
}
get_values(change_list, "scenario1", data1$S1)
# A C B B B C B B C A A C C A B ...
#"a1" "c1" "b1" "b1" "b1" "c1" "b1" "b1" "c1" "a1" "a1" "c1" "c1" "a1" "b1" ...
get_values(change_list, "scenario2", data1$S1)
# A C B B B C ..
# "something" "different" "completely" "completely" "completely" "different"..