序: 我看过这篇文章:How to convert a factor to an integer\numeric without a loss of information?,但它并不适用于我所遇到的问题。它解决了将因子形式的向量转换为数字的问题,但我遇到的问题大于此。
问题: 我试图将数据帧中的列从因子转换为数字,同时使用paste0表示数据帧。这是一个例子:
aa=1:10
bb=rnorm(10)
dd=data.frame(aa,bb)
get(paste0("d","d"))[,2]=as.factor(get(paste0("d","d"))[,2])
(我使用的实际代码要求我使用paste0函数) 我得到错误:赋值目标扩展到非语言对象 我不知道如何做到这一点,我认为弄乱它的是paste0函数。
答案 0 :(得分:0)
首先,这不是一种自然的方式来思考事物或用R编码事物。它可以做到,但如果你改写你的问题以提供更大的图景,有人可能提供更自然的方式来做到这一点在R.(与评论中提到的@joran一样。)
话虽如此,要在R中执行此操作,您需要拆分您在一行中尝试执行的三个步骤:使用指定的变量获取数据框,将所需的列设为一个因子,以及然后分配回变量名称。在这里我将它包装在一个函数中,因此需要在pos = 1而不是默认值中进行赋值,默认值只在函数内命名。
tof <- function(dfname, colnum) {
d <- get(dfname)
d[, colnum] <- factor(d[, colnum])
assign(dfname, d, pos=1)
}
dd <- data.frame(aa=1:10, bb=rnorm(10))
str(dd)
## 'data.frame': 10 obs. of 2 variables:
## $ aa: int 1 2 3 4 5 6 7 8 9 10
## $ bb: num -1.4824 0.7904 0.0258 1.2075 0.2455 ...
tof("dd", 2)
str(dd)
## 'data.frame': 10 obs. of 2 variables:
## $ aa: int 1 2 3 4 5 6 7 8 9 10
## $ bb: Factor w/ 10 levels "-1.48237228248052",..: 1 8 4 9 5 10 2 7 3 6