逐行操作data.frame中的一列的更快方法是什么?
我有一个带有数字纬度和经度值的数据框。data.frame有14K行和40列 我想在数据框中添加一个名为“半球”的类别列,以便轻松区分北部(纬度>0)和南部(纬度<0)。我就是这么做的:逐行操作data.frame中的一列的更快方法是什么?,r,dataframe,R,Dataframe,我有一个带有数字纬度和经度值的数据框。data.frame有14K行和40列 我想在数据框中添加一个名为“半球”的类别列,以便轻松区分北部(纬度>0)和南部(纬度0){ myDataFrame[r,“半球”]@baptiste的ifelse解决方案是加快矢量化比较的常用方法,但在这种情况下,一些明智的子集设置和符号的使用可能会更快: myDataFrame$hemisphere <- c("South","Equator","North")[sign(myDataFrame$latitud
for (r in 1:nrow(myDataFrame)) {
if (myDataFrame[r, "latitude"] > 0) {
myDataFrame[r, "hemisphere"] <- "North"
} else {
myDataFrame[r, "hemisphere"] <- "South"
}
}
for(1中的r:nrow(myDataFrame)){
如果(myDataFrame[r,“纬度”]>0){
myDataFrame[r,“半球”]@baptiste的ifelse
解决方案是加快矢量化比较的常用方法,但在这种情况下,一些明智的子集设置和符号的使用可能会更快:
myDataFrame$hemisphere <- c("South","Equator","North")[sign(myDataFrame$latitude)+2]
myDataFrame$hemisphereifelse
很快,但如果需要效率,您最好使用子集基本方法
给出一些示例数据:
set.seed(1)
df <- data.frame(site = 1:14000, latitude = rnorm(14000))
给
> head(df)
site latitude hemisphere
1 1 -0.6264538 South
2 2 0.1836433 North
3 3 -0.8356286 South
4 4 1.5952808 North
5 5 0.3295078 North
6 6 -0.8204684 South
怎么样myDataFrame=transform(myDataFrame,半球=ifelse(纬度>0,“北”、“南”))
?@baptiste Yep,这真的很快。谢谢!为什么不给它一个真正的答案呢?@James谢谢。很尴尬,因为我是一个地理学家。大脑在那里失灵。现在修复了。假设它是地磁reversal@James几月前我在大学里学过这些(当我现在研究过去的环境/全球变化时,我的地理学分支与地质学更为一致。)我应该援引这个理由,这样我就不会看起来像个无能的白痴;-)
> head(df)
site latitude hemisphere
1 1 -0.6264538 South
2 2 0.1836433 North
3 3 -0.8356286 South
4 4 1.5952808 North
5 5 0.3295078 North
6 6 -0.8204684 South