如何在r

时间:2018-10-14 10:28:47

标签: r

如果我问错了,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>

1 个答案:

答案 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