R 重新编码/重新分级数据。不同级别的帧因子

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)))

每次我需要重新编码一些变量集时,我都会考虑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)))
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)