将字符串作为字符而不是因子的R转换列

将字符串作为字符而不是因子的R转换列,r,dataframe,r-factor,R,Dataframe,R Factor,我对转换的行为感到好奇。有两种方法可以尝试将新列创建为字符而不是因子: x <- data.frame(Letters = LETTERS[1:3], Numbers = 1:3) y <- transform(x, Alphanumeric = as.character(paste(Letters, Numbers))) x$Alphanumeric = with(x, as.character(paste(Letters, Numbers))) x y str(x$Alphanu

我对
转换的行为感到好奇。有两种方法可以尝试将新列创建为字符而不是因子:

x <- data.frame(Letters = LETTERS[1:3], Numbers = 1:3)
y <- transform(x, Alphanumeric = as.character(paste(Letters, Numbers)))
x$Alphanumeric = with(x, as.character(paste(Letters, Numbers)))
x
y
str(x$Alphanumeric)
str(y$Alphanumeric)
但从内部看,只有一个有效:

> str(x$Alphanumeric) # did convert to character
 chr [1:3] "A 1" "B 2" "C 3"
> str(y$Alphanumeric) # but transform didn't
 Factor w/ 3 levels "A 1","B 2","C 3": 1 2 3

我没有发现
?transform
对解释这种行为非常有用-大概是
字母数字
被强制恢复为一个因子-或者找到一种方法来阻止它(类似
stringsAsFactors=FALSE
for
data.frame
)。最安全的方法是什么?例如,在
应用
plyr
函数中,是否存在类似的陷阱需要注意?

转换
相比,这不是一个问题,而是与
数据.frame
有关,其中
stringsafactors
默认设置为
TRUE
。添加一个参数,该参数应为
FALSE
,您就可以开始了:

y <- transform(x, Alphanumeric = paste(Letters, Numbers),
               stringsAsFactors = FALSE)
str(y)
# 'data.frame': 3 obs. of  3 variables:
#  $ Letters     : Factor w/ 3 levels "A","B","C": 1 2 3
#  $ Numbers     : int  1 2 3
#  $ Alphanumeric: chr  "A 1" "B 2" "C 3"

这是因为它采用了一种与
方法类似的方法:创建一个字符向量并添加它(通过
[谢谢!我想知道
stringsAsFactors
,但看不到它实际上会传递到什么-我假设它必须在
数据框架中。你能解释一下发生了什么吗?想想看,我已经习惯了
x$char@Silverfish,你用
转换
做的更像是
y,这很有意义。我注意到
y它被传递到
data.frame
y <- transform(x, Alphanumeric = paste(Letters, Numbers),
               stringsAsFactors = FALSE)
str(y)
# 'data.frame': 3 obs. of  3 variables:
#  $ Letters     : Factor w/ 3 levels "A","B","C": 1 2 3
#  $ Numbers     : int  1 2 3
#  $ Alphanumeric: chr  "A 1" "B 2" "C 3"
y <- within(x, {
  Alphanumeric = paste(Letters, Numbers)
})
str(y)
# 'data.frame':  3 obs. of  3 variables:
#  $ Letters     : Factor w/ 3 levels "A","B","C": 1 2 3
#  $ Numbers     : int  1 2 3
#  $ Alphanumeric: chr  "A 1" "B 2" "C 3"