我正在尝试获取大数据框中每列的最小值/最大值,作为了解我的数据。我的第一次尝试是:
apply(t,2,max,na.rm=1)
它将所有内容视为字符向量,因为前几列是字符类型。所以一些数字列的最大值是" -99.5"
.
然后我尝试了这个:
sapply(t,max,na.rm=1)
但它抱怨max 对因子没有意义. (lapply
是一样的。)令我困惑的是apply
想法max
对于因素来说非常有意义,例如它为第 1 列返回“ZEBRA”。
顺便说一句,我看了一下在 POSIXct 向量上使用 sapply https://stackoverflow.com/questions/2482125/r-using-sapply-on-vector-of-posixct其中一个答案说“当您使用 sapply 时,您的对象被强制为数字,...“。这是发生在我身上的事情吗?如果是这样,是否有一个不强制的替代应用函数?当然这是一个常见的需求,因为数据框类型的关键特征之一是每列可以是不同的类型。
如果它是一个“有序因素”,事情就会有所不同。这并不是说我喜欢“有序因素”,我不喜欢,只是说有些关系是为“有序因素”定义的,而不是为“因素”定义的。因素被认为是普通的分类变量。您将看到因素的自然排序顺序,即您所在区域的字母词汇顺序。如果您想自动将每一列强制转换为“数字”,...日期和因素等等,请尝试:
sapply(df, function(x) max(as.numeric(x)) ) # not generally a useful result
或者,如果您想首先测试因素并按预期返回:
sapply( df, function(x) if("factor" %in% class(x) ) {
max(as.numeric(as.character(x)))
} else { max(x) } )
@Darrens 评论确实效果更好:
sapply(df, function(x) max(as.character(x)) )
max
字符向量确实成功。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)