14

我有以下数据框:

    name1  name2
        A      B
        B      D
        C      C
        D      A

“name1”和“name2”列被视为因子,因此 A、B、C 和 D 被视为水平。但是我想以某种方式转换这个数据框,使它成为

    name1  name2
      "A"    "B"
      "B"    "D"
      "C"    "C"
      "D"    "A"

换言之,将其转换为将 A、B、C 和 D 视为字符串的方式。

我怎样才能做到这一点?

4

3 回答 3

21

您正在寻找as.character,您需要将其应用于data.frame

假设X是您的 data.frame
如果fctr.cols是您的因子列的名称,那么您可以使用:

 X[, fctr.cols] <- sapply(X[, fctr.cols], as.character)

您可以使用以下方法收集您的因子列is.factor

 fctr.cols <- sapply(X, is.factor)
于 2013-10-06T02:21:04.933 回答
5

这可能比上面的答案简单一点。

#where your dataframe = df
df.name1 <- as.character (df.name1)
df.name2 <- as.character (df.name2)

我需要在工作中一直做这样的事情,因为数据太乱了。我已经能够使用 StringsAsFactors=FALSE 在导入时做到这一点,但在最新版本的 r 中,我在 read.csv 上遇到错误。理想情况下,我很快就会解决这个问题......与此同时,我一直将其作为一种快速有效的方法。它将旧变量 foo(因子类型)转换为新变量 fooChar(字符类型)。我通常通过将新变量命名为与旧变量相同的名称来就地进行操作,但您可能希望在信任它替换值之前使用它。

#Convert from Factor to Char
#Data frame named data
#Old Variable named foo, factor type
#New Variable named fooChar, character type

data$fooChar <-as.character(data$foo)

#confirm the data looks the same:
table (data$fooChar)

#confirm structure of new variable
str(data)
于 2017-01-04T15:51:14.513 回答
1

如果您只想转换所选的因子变量列而不是数据框中的所有因子变量列,您可以使用:

file1[,n] <- sapply(file1[,n], as.character)

其中 n 是列号。

于 2020-04-09T17:35:03.190 回答