R:数据帧中从数字到因子与paste0的列(反之亦然)

时间:2016-07-15 15:09:22

标签: r dataframe

序: 我看过这篇文章: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函数。

1 个答案:

答案 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