LoginSignup
1
0

More than 5 years have passed since last update.

長さの違うリストを一つのデータフレームにまとめたかった

Posted at

長さの違う複数のリストを、一つのデータフレームにまとめたかった。
例えば、こんなリストをまとめようとした。

# 要素数の異なるリスト
a <- c(1,2,3)
b <- c(1,2,3,4,5,6,7)

そして、このリストを次のようにまとめようとすると、エラーになる。

A <- data.frame(a,b)
# Aの長さは3,Bの長さは7なのでエラー

短い方のリストをNAで埋めて、長さをそろえてやるとうまくいく。

c <- c(1,2,3,NA,NA,NA,NA)
#NAで埋めてあれば、要素数が揃うのでOK
B <- data.frame(a,c)

で、いちいち手でNAを入力するのがめんどくさかったので、こういうコードを書いた。

different_length.r
# 2つのリスト長の差を取る関数
diff_length <- function(list1,list2){
  if(length(list1) > length(list2)){
    return (length(list1) - length(list2))
  }else{
      return (length(list2) - length(list1))
    }
}

# リストをNAで埋める関数
fill_by_na <- function(list, num){
      return (c(list,rep(NA,num)))
}

# 上の関数を組み合わせてこうした
a <- c(1,2,3)
b <- c(1,2,3,4,5,6,7)

shortage <- diff_length(a,b) # 今回は4

fill_by_na(a,shortage)
#  1  2  3 NA NA NA NA

C <- data.frame(a = fill_by_na(a,shortage),b)
#    a b
# 1  1 1
# 2  2 2
# 3  3 3
# 4 NA 4
# 5 NA 5
# 6 NA 6
# 7 NA 7

きっと、もっとうまくやる方法があると思うし、そもそもデータフレームの正しい使い方ではない気もする。コメント欄で正しいやり方をご指摘いただけると嬉しいです。

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0