使用逗号创建数据框

Creating a Data Frame with Commas

是否可以制作包含具有“多个元素”的列的数据框?

例如 - 给定以下数据:

a = sample(c(1,-1), size=2 ,replace = T, prob=c(0.5, 0.5))
b = sample(c(1,-1), size=3 ,replace = T, prob=c(0.5, 0.5))
c = sample(c(1,-1), size=4 ,replace = T, prob=c(0.5, 0.5))

#some random numbers
d = rexp(3,5)

#some random letters
e = "g"

#id column
n_id = 1:3

能否将所有这些组合成一个数据框(4 列,3 行)?我尝试以常规方式执行此操作:

answer = data.frame(a,b,c,d,e)

但是我得到这个错误:

Error in data.frame(a, b, c, d, e, n_id) : 
  arguments imply differing number of rows: 2, 3, 4, 1

是否可以在 R 中执行此操作?我想得到这样的东西:

谢谢!

您可以使用此代码:

a = sample(c(1,-1), size=2 ,replace = T, prob=c(0.5, 0.5))
         b = sample(c(1,-1), size=3 ,replace = T, prob=c(0.5, 0.5))
         c = sample(c(1,-1), size=4 ,replace = T, prob=c(0.5, 0.5))
         
         #some random numbers
         d = rexp(3,5)
         
         #some random letters
         e = "g"

df = list(a=a, b=b, c=c, d=d, e=e)
         attributes(df) = list(names = names(df),
                                 row.names=1:max(length(c), length(c)), class='data.frame')

输出:

     a    b  c          d    e
1   -1    1 -1 0.05939183    g
2    1    1 -1 0.01683215 <NA>
3 <NA>   -1  1 0.59068018 <NA>
4 <NA> <NA>  1       <NA> <NA>
Warning message:
In format.data.frame(if (omit) x[seq_len(n0), , drop = FALSE] else x,  :
  corrupt data frame: columns will be truncated or padded with NAs

它会发出警告,因为您实际上不想要具有不同向量长度的数据帧。

data.table(n_id = n_id,a=list(a,b,c),d=d,e=e)

    n_id           a          d      e
   <int>      <list>      <num> <char>
1:     1       -1, 1 0.01357525      g
2:     2    -1,-1, 1 0.34263042      g
3:     3  1, 1,-1, 1 0.08830073      g

你也可以用 tidyverse

tibble(n_id = n_id,a=list(a,b,c),d=d,e=e)

   n_id a              d e    
  <int> <list>     <dbl> <chr>
1     1 <dbl [2]> 0.0136 g    
2     2 <dbl [3]> 0.343  g    
3     3 <dbl [4]> 0.0883 g   

请注意,在这两种方法下,a 是 list-column