如果我问错了,R的新手和歉意:
如何在不等长列的行的两端添加数字?
示例代码:
x = 1:12
y = 1:10
z=1:8
attributes(df) = list(names = names(df),row.names=1:max(length(x), length(y),length(z)), class='data.frame')
df
# x y z
#1 1 1 1
#2 2 2 2
#3 3 3 3
#4 4 4 4
#5 5 5 5
#6 6 6 6
#7 7 7 7
#8 8 8 8
#9 9 9 <NA>
#10 10 10 <NA>
#11 11 <NA> <NA>
#12 12 <NA> <NA>
答案 0 :(得分:1)
首先,为了将长度不等的向量列表转换成data.frame
,并用NA
的代码填充向量是不正确的,这比较好。
x <- 1:12
y <- 1:10
z <- 1:8
df <- list(x = x, y = y, z = z)
n <- max(sapply(df, length))
df <- lapply(df, function(x){
c(x, rep(NA, n - length(x)))
})
df <- do.call(cbind.data.frame, df)
以下代码将每行中的第一个NA
替换为值3
。
它使用apply
遍历各行,并更改至少具有一个NA
值的行。
df[] <- t(apply(df, 1, function(x){
if(anyNA(x)){
i <- min(which(is.na(x)))
x[i] <- 3
}
x
}))
df
# x y z
#1 1 1 1
#2 2 2 2
#3 3 3 3
#4 4 4 4
#5 5 5 5
#6 6 6 6
#7 7 7 7
#8 8 8 8
#9 9 9 3
#10 10 10 3
#11 11 3 NA
#12 12 3 NA