首页 > 解决方案 > 如何在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>

标签: r

解决方案


首先,为了将长度不等的向量列表转换为 a data.frame,用 's 填充向量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)

以下代码将用NAvalue 替换每行中的第一个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

推荐阅读