2

我对Rspaste函数与数据框的行和列选择相结合有一个特殊的问题。似乎paste总是围绕它的输入参数as.numeric()或做类似工作的东西。

这是我正在做的代码片段:

paste(df[1, c("entry1", "entry2")], collapse="; ")

这将传递数据框的第一行,df其中列条目为"entry1""entry2"。我假设这样的输出:

"Auffuellung; Holozaen"

相反,我收到了传递的数据帧条目的串联数字等价物(不是索引):

"1; 5"

调用str(df[1, c("entry1", "entry2")])我的真实数据库会产生以下输出(德语,不要奇怪;)):

'data.frame':   1 obs. of  2 variables:
 $ Hauptbestandteile: Factor w/ 38 levels "Auffuellung",..: 1
 $ Chronografie     : Factor w/ 18 levels "Devon","Famennium",..: 5

在这种情况下我做错了什么?到现在为止,我从来没有遇到过这样的paste-function 问题,我也从来没有预料到会发生这样的事情。那么,如何解决问题并获得连接字符串的正确输出而不是连接数字等价物?

先感谢您!

4

1 回答 1

6

factor您的问题与您的数据是变量这一事实有关。paste正在粘贴底层"integer"代码。这是令人困惑的,并且对于如何绕过它并不是很明显。您需要使用将其转换为矢量unlist(),它将按预期工作...

例子

df <- data.frame( Month = factor(month.name) , Short = factor(month.abb) )
df[ 1 , ]
#    Month Short
#1 January   Jan

paste( df[ 1 , ] , collapse = "; " )
#[1] "5; 5"

paste( unlist( df[ 1 , ] ) , collapse = "; " )
#[1] "January; Jan"

当然,在读取数据时,您可以避免使用 to 的stringsAsFactors = FALSE参数将字符串自动转换为因子read.*

有关此问题的讨论,请参见此处的 R 房间聊天日志。

于 2013-11-08T11:04:04.937 回答