gpt4 book ai didi

r - 在R中的data.frame的行上使用apply函数

转载 作者:行者123 更新时间:2023-12-02 09:03:42 25 4
gpt4 key购买 nike

我有一个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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com