复制到数据帧时会存储重复的值

时间:2015-08-12 08:38:06

标签: r dataframe

我有一个像x,

这样的数据框
> x
 x1 x2 x3 x4
 1  3  5  7
 3  4  7  2 
 1  7  8  7
 2  3  7  4

我想根据一些计算更改每一行。生成的行的大小不同。说,我必须要复制一行长度为2的

y <- c(1,2)
x[1,] <- y

然后将值重复存储在x,

> x
 x1 x2 x3 x4
 1  2  1  2
 3  4  7  2 
 1  7  8  7
 2  3  7  4

但我的输出应该是,

> x
 x1 x2 x3 x4
 1  2  NA  NA
 3  4  7  2 
 1  7  8  7
 2  3  7  4

怎么做?

2 个答案:

答案 0 :(得分:4)

您可以通过将{y}的length分配给ncol(x),根据“x”的列数来填充NAs。如果“y”的length小于ncol(x),则会使用NA填充其他元素。

  x[1,] <- `length<-`(y, ncol(x))
  x
  #  x1 x2 x3 x4
  #1  1  2 NA NA
  #2  3  4  7  2
  #3  1  7  8  7
  #4  2  3  7  4

为了便于理解,这类似于评论中提到的两步流程@mpalanco,我首先将length(y)更改为length(x)(或{{1} } - 在'data.frame'中,ncol(x)length相同)来填充NAs,然后将'x'的第一行值替换为'y'。

ncol

数据

  length(y) <- length(x)
  x[1,] <- y

答案 1 :(得分:2)

没有想到一个聪明的解决方案,所以这里有一个小功能,用NA填充y。使用填充的y给出了预期的行为。

pad_with_NA <- function(y, dim_x) {
  if(length(y)<dim_x) {
    y <- c(y, rep(NA, dim_x-length(y)))
  }
  y
}

x[1,] <- pad_with_NA(y, dim(x)[2])