作为一种练习,我正在创建一个函数来帮助我快速将变量重新编码为数值。创建函数的想法是将任意长度的多个值快速重新编码为数字形式。例如,如果数据集确实很长,则该函数理论上应该重新编码所有这些值,而不必手动键入将其重新编码为特定值的每种条件。
例如:
levels(d$letters)
[1] a b c d
该函数的一般形式是:
d$letters.recode[d$letters == "a"] <- 1
d$letters.recode[d$letters == "b"] <- 2
d$letters.recode[d$letters == "c"] <- 3
并使用此功能:
rc.f <- function(a, b){
x <- levels(a)
y <- length(a)
b <- NA
for (i in 1:y){
z <- b[a==x[i]] <- i
}
}
从理论上讲,该函数的想法是创建另一个变量,其中a重新编码为1,b重新编码为2,依此类推。
但是,当我运行rc.f(d$letters, d$letters.recode)
时,不会在数据集中创建任何新变量,并且该函数不会返回错误。
有什么想法吗?
谢谢。
另一个示例数据集d
:
说出一个受访者列表,根据他们所在的地区为他们分配一个类别:
Respondent Region
1 d
2 b
3 g
4 c
5 e
6 c
7 f
8 a
我正在寻找一种方法将d$Region
重新编码为数字值,以d$Region.R
。
使用与上述相同的函数,我想知道是否可以通过在函数中输入d$Region
和d$Region.R
来使用该函数在数据框中创建另一个变量。因此,将a,b,c,[...],g重新编码为1,2,3,[...],7。
答案 0 :(得分:0)
如果您想将a,b,f,d分别设为1,2,4,3,则使用以下内容
我已经为rc.f函数更新了一些代码
代码是
rc.f <- function(a)
{
a<-as.factor(a)
x <- levels(a)
b <- NA
for (i in 1:length(a))
{
b[a==x[i]] <- i
}
b
}
让我们举个例子
> l<-c("a","b","b","a","a","g","h","y","f","v","h","j","f","d","a","s","s","s")
> l
[1] "a" "b" "b" "a" "a" "g" "h" "y" "f" "v" "h" "j" "f"
[14] "d" "a" "s" "s" "s"
> rc.f(l)
[1] 1 2 2 1 1 5 6 10 4 9 6 7 4 3 1 8 8 8
如果您希望a,b,f,d为1,2,6,4,则使用以下内容
rc.f <- function(a)
{
a<-as.factor(a)
b <- NA
for (i in 1:26)
{
b[a==letters[i]] <- i
}
b
}
让我们举个例子
> l<-c("a","b","b","a","a","g","h","y","f","v","h","j","f","d","a","s","s","s")
> l
[1] "a" "b" "b" "a" "a" "g" "h" "y" "f" "v" "h" "j" "f" "d"
[15] "a" "s" "s" "s"
> rc.f(l)
[1] 1 2 2 1 1 7 8 25 6 22 8 10 6 4 1 19 19 19