将 NaN 替换为上面的值(用于匹配 ID)- Matlab

发布于 2024-12-09 06:04:32 字数 492 浏览 0 评论 0原文

我有一个包含 Col1 ID 和 Col2 值的矩阵。

mat = [ ...
      1000 3
      1000 4
      1000 nan
      1000 nan
      1000 5

      2222 1
      2222 2
      2222 nan

      3333 nan

      4444 1 ] ;

我需要将 nan 替换为其上方行中的值,但须遵守以下条件:上方行应具有相同的 ID。

回答:

mat = [ ...
      1000 3
      1000 4
      1000 4
      1000 4
      1000 5

      2222 1
      2222 2
      2222 2

      3333 nan

      4444 1 ] ;

您能建议一种矢量化方法吗?

I have a matrix with Col1 IDs and Col2 Values.

mat = [ ...
      1000 3
      1000 4
      1000 nan
      1000 nan
      1000 5

      2222 1
      2222 2
      2222 nan

      3333 nan

      4444 1 ] ;

I need to replace nan with the value in the row above it, but subject to the condition: row above should have the same ID.

Answer:

mat = [ ...
      1000 3
      1000 4
      1000 4
      1000 4
      1000 5

      2222 1
      2222 2
      2222 2

      3333 nan

      4444 1 ] ;

Can you suggest a vectorized approach?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

脸赞 2024-12-16 06:04:32

此代码不会处理具有相同 ID 的连续 NaN。

inds = find([mat(2:end,1)==mat(1:end-1,1)] & isnan(mat(2:end,2)))
mat(inds+1,2) = mat(inds,2)

对示例数据运行两次即可完成任务。

This code won't handle consecutive NaNs with the same ID.

inds = find([mat(2:end,1)==mat(1:end-1,1)] & isnan(mat(2:end,2)))
mat(inds+1,2) = mat(inds,2)

Running it twice on the sample data completes the task.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文