我有一个data.frame:
df<-data.frame(x=c(1,2,3),y=c('b','a','c'))
如果输入:
as.character(df[1,])
我得到:
"1" "2"
或者,如果我输入:
paste(df[1,],collapse=':')
我得到:
1:2
但是,如果我输入:
apply(df,1,as.character)apply(df,1,paste,collapse=':')
我得到:

[1,] "1"  "2"  "3"
[2,] "b"  "a"  "c"


"1:b" "2:a" "3:c"

我假设运行apply函数会将df的每一行强制为一个 vector ,然后将其应用于例如as.character()或paste()

但是,事实并非如此。有人可以解释在这种情况下应用程序发生了什么,以及为什么它对以下情况给出了不同的答案:
paste(df[1,],collapse=":")然后paste(df[2,],collapse=":")然后paste(df[3,],collapse=":")

最佳答案

问题在于字符串列是factor类,因为在构造data.frame时,默认选项是stringsAsFactors = TRUE,当我们跨列执行factor时,paste将被强制为整数存储模式。为了避免这种行为,请使用

df <- data.frame(x=c(1,2,3),y=c('b','a','c'), stringsAsFactors = FALSE)

paste(df[1,],collapse=":")
#[1] "1:b"

使用apply,它将转换为matrix,并且矩阵只能具有一个类,因此,当基于类的优先级存在字符元素时,它将数字转换为“字符”

关于r - 在R中的data.frame的行上使用apply函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60792233/

10-13 07:24
查看更多