我感兴趣的是将一个数字列分解为3个因子。我所做的是将列子集划分为3个区间范围,然后尝试将3个区间分解为单个列Z,最后将新的因子列Z合并到我的原始数据框架中,但我的想法不起作用。有没有一种简单的方法可以将一个数值列分解为任意数量的因子,这样数据框就不会被扭曲?
set.seed(0)
df1 <- data.frame(Y =floor(runif(10, min=0, max=10)),
X =floor(runif(10, min=0, max=50)))
str(df1)
'data.frame': 10 obs. of 2 variables:
$ Y: num 8 2 3 5 9 2 8 9 6 6
$ X: num 3 10 8 34 19 38 24 35 49 19
# The intended three factor intervals: X=3, 4<=X<=30, X>30
df1$fac1 <- factor(df1$X == 3, label=c(0,1))
df1$fac2 <- factor(df1$X >= 4 & df1$X <= 30, label=c(0,1))
df1$fac3 <- factor(df1$X > 30, label=c(0,1))
head(df1)
str(df1)
df2 = cbind(df1$Y, df1$X1, df1$X2, df1$X3)
Warning messages:
1: In xtfrm.data.frame(x) : cannot xtfrm data frames
2: In xtfrm.data.frame(x) : cannot xtfrm data frames
3: In xtfrm.data.frame(x) : cannot xtfrm data frames
head(df2,3)
[,1] [,2] [,3] [,4]
[1,] 8 2 2 2
[2,] 2 1 1 1
[3,] 3 2 2 2
但是,即使这样做有效,我怀疑这可能会扭曲我的原始df1
的行。我真正想要的是使用给定的间隔使X成为具有3个水平的单列因子。
2条答案
按热度按时间efzxgjgh1#
有很多选择,但
cut()
可能是最好的:2uluyalo2#
可以使用
factor()
。输出