逐行操作data.frame中的一列的更快方法是什么?

逐行操作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

我有一个带有数字纬度和经度值的数据框。data.frame有14K行和40列

我想在数据框中添加一个名为“半球”的类别列,以便轻松区分北部(纬度>0)和南部(纬度<0)。我就是这么做的:

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$hemisphere
ifelse
很快,但如果需要效率,您最好使用子集基本方法

给出一些示例数据:

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