使用R拆分数据时列表中的空对象

使用R拆分数据时列表中的空对象,r,list,for-loop,null,R,List,For Loop,Null,我是R新手,有一个任务是用R做一些基础研究 我有一个导入了风向和风速数据的csv文件,希望根据风向分割风速 所以我创建了这段R代码 north.ls = list() east.ls = list() south.ls = list() west.ls = list() i = as.integer(1) print("start") for (i in 1:length(DD)) { if (DD[i] >=315 & DD[i] <= 360 | DD[i] >

我是R新手,有一个任务是用R做一些基础研究 我有一个导入了风向和风速数据的csv文件,希望根据风向分割风速

所以我创建了这段R代码

north.ls = list()
east.ls  = list()
south.ls = list()
west.ls = list()
i = as.integer(1)
print("start")
for (i in 1:length(DD)) {
  if (DD[i] >=315 & DD[i] <= 360 | DD[i] >= 1 & DD < 45) {
    north.ls[[i]] = as.integer(FH[i])
    print("nord")
  }
  if(DD[i] >=45 & DD[i] < 135){
    east.ls[[i]] = as.integer(FH[i])
    print("east")
  }
  if(DD[[i]] >= 145 & DD[i] < 225){
    south.ls[[i]] = as.integer(FH[i])
    print("south")
  } 
  if(DD[[i]] >=225 & DD[i] < 315){
    west.ls[[i]] = as.integer(FH[i])
    print("west")
  }
}
north.ls=list()
east.ls=list()
south.ls=list()
west.ls=list()
i=as.integer(1)
打印(“开始”)
用于(1中的i:长度(DD)){
如果(DD[i]>=315&DD[i]=1&DD<45){
north.ls[[i]]=as.integer(FH[i])
印刷品(“北方”)
}
如果(DD[i]>=45&DD[i]<135){
east.ls[[i]]=as.integer(FH[i])
印刷品(“东”)
}
如果(DD[[i]>=145和DD[i]<225){
south.ls[[i]]=as.integer(FH[i])
印刷(“南方”)
} 
如果(DD[[i]>=225和DD[i]<315){
west.ls[[i]]=as.integer(FH[i])
印刷品(“西部”)
}
}
这在将正确的速度放入正确的列表时效果很好,但是每次条件不正确时,列表仍然会得到一个空值,因此列表中有很多空值。问题是什么?如何解决

我希望你能理解我的解释


提前感谢

当您在列表中的位置[i]创建一个新项目,而以前的位置没有项目时,所有这些位置都将为空

这里有一个稍微好一点的方法来生成您想要做的事情(我对您的数据结构和目标进行了一些有根据的猜测),而不引入以下空值:

north.ls<-FH[(DD>=315 & DD <= 360) | (DD >= 1 & DD < 45)]
east.ls<-FH[DD>=45 & DD < 135]
south.ls<-FH[DD>=135 & DD < 235]
west.ls<-FH[DD>=235 & DD < 315]
north.ls=315&DD=1&DD<45]
东部。ls=45和DD<135]
南部。ls=135,DD<235]
西部。ls=235,DD<315]

这将为您提供四个向量,根据DD中的数据将FH中的数据划分为北、东、南和西。四个列表的长度不等于FH或DD(或彼此)的长度,并且除非它们已经在FH中,否则不应引入空值。

您的数据集中是否有方向列(即,您如何知道哪些行属于N/e/S/W)?Hi 0romis。这不是真正的R代码。使用这样的ifs,您错过了所有矢量化的优点。看起来您受到了其他编码语言的过度影响(例如初始化i)。也许可以回到您以前的教程,思考如何以矢量化方式完成此操作?在寻求帮助时,您应该包括一个简单的示例输入和所需输出,用于测试和验证可能的解决方案。可能有更好的方法来完成您所追求的目标。当您在位置的列表上创建新项目时[i]如果以前的位置中没有项,所有这些位置都会得到空值。一种解决方案是将
north.ls[[i]]=as.integer(FH[i])
替换为
north.ls=c(north.ls,FH[i])
。但再次强调,这不是编写R代码的好方法。对于试图回答问题的人来说,真正的问题是我们不知道这些方向列表的用途。如果你只是想要一个可以通过表格调用更好地处理的计数。如果你想要速度分布,那么请查找包
圆形
,其中h用于计算和显示360度左右排列的数据。您可能设置了“XY问题”:请参阅