将字符串作为字符而不是因子的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
fordata.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"