R 重新编码/重新分级数据。不同级别的帧因子
每次我需要重新编码一些变量集时,我都会考虑SPSS重新编码函数。我必须承认这很简单。在R 重新编码/重新分级数据。不同级别的帧因子,r,levels,R,Levels,每次我需要重新编码一些变量集时,我都会考虑SPSS重新编码函数。我必须承认这很简单。在car软件包中有一个类似的recode函数,它确实起到了作用,但我们先假设我想用factor完成一些事情 我有data.frame,其中有几个变量的值范围为1到7。我想“反转”变量值,因此将1s替换为7s,2s替换为6s,3s替换为5s等。我可以利用因子功能: # create dummy factor set.seed(100) x <- as.factor(round(runif(100,1,7)))
car
软件包中有一个类似的recode
函数,它确实起到了作用,但我们先假设我想用factor
完成一些事情
我有data.frame
,其中有几个变量的值范围为1到7。我想“反转”变量值,因此将1s替换为7s,2s替换为6s,3s替换为5s等。我可以利用因子功能:
# create dummy factor
set.seed(100)
x <- as.factor(round(runif(100,1,7)))
y <- factor(x, levels = rev(levels(x)))
当我想重新编码不具有相同级别的因子时,问题就开始了。如果某个因子z具有级别c(“1”、“3”、“4”、“6”、“7”)
,我是否有可能利用因子
功能“反转”级别,使1=7、2=6、3=5等
其他有效的重新编码功能应该足够了 是的,只需分配到级别
:
R> set.seed(100)
R> x <- as.factor(round(runif(100,1,7)))
R> table(x)
x
1 2 3 4 5 6 7
3 16 20 19 18 17 7
R> levels(x) <- LETTERS[1:7]
R> table(x)
x
A B C D E F G
3 16 20 19 18 17 7
R>
R>set.seed(100)
R> x表(x)
x
1 2 3 4 5 6 7
3 16 20 19 18 17 7
R> 标高(x)表(x)
x
A B C D E F G
3 16 20 19 18 17 7
R>
您必须为factor提供levels
参数(如德克所写):
set.seed(2342472)
(x如果你完成了因子水平,你就可以开始了:
df <- data.frame(x=factor(c(2,4,5,6)))
df$x <- factor(df$x, levels = 7:1)
table(df$x)
7 6 5 4 3 2 1
0 1 1 1 0 1 0
df在这种情况下,既然你有数字,为什么不使用模运算变换数字呢
乙二醇
levels(x)我的问题似乎不太简洁。如果我有“不完整”的级别,例如c(“2”、“4”、“5”、“6”),通过反转它们,我会得到c(“6”、“5”、“4”、“2”),我不想这样做。我想替换值/级别,使1=7,2=6,3=5,反之亦然。这是可以通过因子/级别函数实现的,还是我必须使用car::recode()?谢谢这个!似乎我太累了,错过了显而易见的。解决方案很简单…再次感谢!模运算符(余数),类似于C/Java等语言中的%,尽管我相信负值的处理方式有所不同。有趣的是…我将尝试一下!
set.seed(2342472)
( x <- round(runif(10,1,7)) )
# [1] 7 5 5 3 1 2 5 3 3 2
( xf <- as.factor(x) )
# [1] 7 5 5 3 1 2 5 3 3 2
# Levels: 1 2 3 5 7
( yf <- factor(x,levels=7:1) )
# [1] 7 5 5 3 1 2 5 3 3 2
# Levels: 7 6 5 4 3 2 1
( yxf <- factor(xf,levels=7:1) )
# [1] 7 5 5 3 1 2 5 3 3 2
#Levels: 7 6 5 4 3 2 1
df <- data.frame(x=factor(c(2,4,5,6)))
df$x <- factor(df$x, levels = 7:1)
table(df$x)
7 6 5 4 3 2 1
0 1 1 1 0 1 0
levels(x) <- as.character((6*as.numeric(levels(x)))%%7+1)