繁体   English   中英

在r中增量追加列表

Incrementally appending a list in r

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有以下问题:我有两个数据框:kl_df和IDlist

head(kl_df)
  STATIONS_ID MESS_DATUM QN_3 FX FM QN_4 RSK RSKF SDK SHK_TAG  NM VPM PM  TMK UPM TXK  TNK  TGK eor
1          73 2000-01-01   NA NA NA   10 2.9    7 0.0       6 8.0 5.6 NA -0.2  94 0.7 -1.7 -2.1 eor
2          73 2000-01-02   NA NA NA   10 0.0    0 1.6       5 7.3 6.2 NA  0.8  92 4.0 -1.4 -0.1 eor
3          73 2000-01-03   NA NA NA   10 0.0    0 0.0       0 8.0 5.7 NA -0.2  95 0.6 -1.3 -1.5 eor
4          73 2000-01-04   NA NA NA   10 0.8    8 0.8       0 7.7 5.9 NA  1.2  89 2.6 -0.4 -1.0 eor
5          73 2000-01-05   NA NA NA   10 0.0    0 1.1       0 5.7 6.6 NA  1.4  93 6.1 -0.7  0.0 eor
6          73 2000-01-06   NA NA NA   10 0.0    0 0.0       0 8.0 6.0 NA  0.1  98 1.4 -1.0 -1.0 eor

head(IDlist)
    Stations_id von_datum bis_datum Stationshoehe geoBreite geoLaenge            Stationsname Bundesland    res
194          15  19510101  20190331           390   49.2346   10.9668                Abenberg     Bayern annual
306          29  19510101  20190527           260   49.7175   10.9101 Adelsdorf (Klaeranlage)     Bayern  daily
485          46  19370101  20190528           325   48.9450   12.4639                Aholfing     Bayern annual
606          55  19370101  20190528           509   47.8780   12.0239   Aibling, Bad-Ellmosen     Bayern annual
684          63  19510101  20190527           747   47.8172   10.5374                 Aitrang     Bayern  daily
857          73  19080101  20190528           340   48.6159   13.0506    Aldersbach-Kriestorf     Bayern annual
            var        per hasfile
194 more_precip historical    TRUE
306 more_precip historical    TRUE
485 more_precip historical    TRUE
606 more_precip historical    TRUE
684 more_precip historical    TRUE
857 more_precip historical    TRUE

IDlist包含有关stations_id的唯一行,而重复项在kl_df中。 现在,我的目标是将用于正确工作站ID的变量“ Stationshoehe”,“ geoBreite”,“ geoLaenge”附加到kl_df。

我试图编写一个函数。 此功能的想法是迭代kl_df,对于每次迭代,请通过IDlist $ Stations_id进行匹配以匹配ID号。 然后,将所需的变量写入列表:

getcoords = function(){
 results=list()
 for (ID in kl_df$STATIONS_ID)  {
  counter = 1
  for (i in IDlist$Stations_id){
   if (ID == i) {
     print(counter)
     append(results, values= c(IDlist$Stationshoehe[counter], IDlist$geoBreite[counter], IDlist$geoLaenge[counter]))
     next
   }
   else {
    counter = counter+1
    print(counter)
   }
  }
 }
 return(results)
}
datlist = getcoords()

但是它仅返回一个空列表... print(counter)行仅用于测试目的。 问题是计数器始终从1到长度(IDlist $ Stations_id)进行计数。 打印示例:

[1] 538
[1] 539
[1] 540
[1] 541
[1] 542
[1] 543
[1] 544
[1] 545
[1] 546
[1] 547
[1] 548
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10

问题:如何修复功能或有更好的方法实现目标? 非常感谢你!

2 个回复

关于写作呢:

results=append(results, values= c(IDlist$Stationshoehe[counter], IDlist$geoBreite[counter], IDlist$geoLaenge[counter]))`

if (ID == i)块中。

R永远不会修改传递给函数的参数, append将返回添加了新元素的列表,但您需要将其存储在某个位置(请参阅https://www.rdocumentation.org/packages/base/versions/3.6.1。 / topics / append )。

当您说:问题是计数器始终从1到length(IDlist $ Stations_id)进行计数时,这是代码的预期行为。 如果你想,只要你找到了一个匹配停止IDlist$Stations_id ,改变你的next (这在这里有,因为没有影响else不会在这种情况下被执行)的break

如果我理解正确的问题,你想要做一个“左连接”的dataframes kl_dfIDlistSTATIONS_ID ,然后选择从加盟的数据帧兴趣的列。

下面,我为您的两个数据框创建了一个更简单的版本-左连接后,您应该可以调整select语句,以仅将感兴趣的列保留在连接的数据框中。

> kl_df <- data.frame(STATIONS_ID=c(1,1,2,2), col_a=c(1,2,3,4), col_b=c(10,15,12,8))
> kl_df
  STATIONS_ID col_a col_b
1           1     1    10
2           1     2    15
3           2     3    12
4           2     4     8

> IDlist <- data.frame(Stations_id=c(1,2,3), col_c=c(10,20,10), col_d=c(99,97,90))
> IDlist
  Stations_id col_c col_d
1           1    10    99
2           2    20    97
3           3    10    90

现在使用dplyr包进行左连接:

> library(dplyr)

> df <- left_join(kl_df, IDlist, by=c("STATIONS_ID"="Stations_id"))
> df <- df %>% select(c(STATIONS_ID,col_a,col_b,col_d))
> df
  STATIONS_ID col_a col_b col_d
1           1     1    10    99
2           1     2    15    99
3           2     3    12    97
4           2     4     8    97

请注意, dplyr软件包中的join函数比使用merge或for循环要快得多。

1 不能追加值R中的列表

我有一个奇怪的格式列表: 从来没有看到[[1]]在之前的列表,问题是,我不能追加事情到此列表中。 我该如何解决? ...

2020-08-18 17:55:42 1 37   r/ list
2 在列表中的r中追加或存储for循环

我实质上是在计算希望绘制的概率。 我的目标是将它们放在列表或向量中,但是这样做一直很麻烦。 我写了这个for循环,可以打印出所有值,但似乎无法将它们存储在列表中。 我已经可以打印结果了(请参见下文),但无法存储它们。 当我看到概率列表中的内容时,我得到一个空list 。 为 ...

3 遍历列表并在R中追加

我对R很陌生,可能会丢失一些信息,但是我无法为这种行为而烦恼: 其中topo具有以下结构: 我想做的是循环浏览第一列,并从第一列中查看与usr的匹配,然后将第二列的内容添加到n ,然后返回。 我会在输出中得到一些数字: 19和16 。 如果我尝试对其进行调试,则会得到以下 ...

2013-10-31 16:48:59 2 802   r
4 将数据框追加到R中的列表

我刚开始使用R编程,并且几乎没有或完全不了解。 当我尝试将数据帧追加到列表中时。 我有以下代码: 当我尝试以下操作时,数据框将完美添加到列表中: 也许当我编写以下代码时,会将2个数据帧完美地添加到列表中: ...

5 将元素追加到 R 函数中的列表

我是 R 的新手,正在尝试编写一个函数来将元素添加到列表中。 下面是函数 varNames 的代码。 我可以用varNames("name1")调用它,但"name1"没有添加到"listNames" (这仍然是一个空列表)。 我一直在尝试一些事情,并寻找答案很长时间,但没有成功。 也试过la ...

6 你如何追加到R列表

我正在尝试为黄土模型选择最佳跨度参数。 我需要将i以及标准错误存储到名为error的列表中。 在从0.10到1的范围内运行后,我可以比较最小误差和用于模型的相应i。 我已经尝试过了,但是似乎没有用。 有任何想法吗? ...

2016-07-19 19:16:35 1 47   r
7 Python以数组增量将值追加到列表

假设我有一个列表列表: 我还有另一个任意列表,让我们说一下颜色: 将指定数量的颜色附加到旋转名称中最简单或最有效的方法是什么? 例如,如果我选择两种颜色,则返回的列表将如下所示: 或者如果我选择3种颜色: ...

2015-10-19 21:06:33 2 94   python
8 如何从r中的多个列表中追加到列表?

我有4个列表:3个大小相同的填充列表和1个空列表,例如: 我想将前3个列表中每个列表的第i个元素附加到第4个列表中。 列表4应如下所示: 我该怎么做呢? 我的代码目前看起来像这样: 但我收到错误: ...

9 根据向量中的元素追加到r中的列表

我在将某些内容添加到列表时遇到问题。 我有5个向量,如下所示: 我的问题是,如何仅基于矢量父级和子级,通过expand.grid()生成如下所示的组合元素: 我试图做这样的事情,但没有用。 谢谢你的任何建议 ...

10 在R中的函数内部列表中追加数据框

我有一个函数,我要从某个范围(例如1-500)的方法中寻找数据帧,但不能要求该函数一次给出所有值。 因此,我尝试创建一个函数以从每个100的块中迭代值。 因此,对于500个输入,我将期望包含5个数据帧的列表 最后,我期望所有这些数据帧都在列表中,然后该函数返回该列表,但是我 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM