我有一个像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
怎么做?
答案 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])