【问题标题】:R, error replacement has xx rows, data has yyR,错误替换有xx行,数据有yy
【发布时间】:2018-05-15 09:35:32
【问题描述】:

这似乎是基本的,但我不知道如何解决这个问题。我有一种情况,我正在编写一个 for 循环,在某个阶段它给了我这个错误,“替换有 3 行,数据有 4”

在我的 for 循环中,我每 4 行写入数据,并且在某些时候替换数据只有 3 个值。在这种情况下,我希望第 4 个值应该用 NA 填充。所以基本上长度为 4,如果少说 2,则 2 个值用 NA 填充。我怎样才能得到这个。

错误信息示例 -

a1 <- data.frame(matrix(NA,nrow = 4,ncol = 0))
v1 <- c(1:3)

a1[,"b1"] <- v1

所以一些代码将 v1 转换为长度 4 并将最后一个值设为 NA 以便我能够编写它。

【问题讨论】:

  • 您可以尝试将最后一行的v1替换为ifelse(length(v1) &lt; 4, c(v1, rep(NA, 4 - length(v1)), v1))
  • length(v1) &lt;- nrow(a1); a1[,"b1"] &lt;- v1
  • @kath,谢谢你的回答,我相信括号里有错字,应该是ifelse(length(v1) &lt; 4, v1 &lt;- c(v1,rep(NA, 4 - length(v1))), v1)。不知何故,它没有返回 NA 没有 **v1 的 4 个值
  • @jogo,谢谢你的回答,但是正如我所提到的,这是 forloop 的一部分,因此 nrow 会不断变化,不会满足原来的要求。
  • a1$v1 &lt;- v1[1:4]

标签: r for-loop vector replace na


【解决方案1】:

你可以:

a1 <- data.frame(matrix(NA,nrow = 4,ncol = 0))
v1 <- c(1:3)
v2 <- rep(NA, nrow(a1))
v2[1:length(v1)] <- v1
a1[,"b1"] <- v2

【讨论】:

  • v2 &lt;- v1; length(v2) &lt;- nrow(a1)
【解决方案2】:

一个简单的解决方案是添加(length(v1)==4 也可以使用):

 v1 <- c(v1, rep(NA, nrow(a1) - length(v1)))

【讨论】:

  • length(v1) &lt;- nrow(a1)
猜你喜欢
  • 2018-04-10
  • 1970-01-01
  • 1970-01-01
  • 2018-02-19
  • 1970-01-01
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多