使用逗号创建数据框
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
是否可以制作包含具有“多个元素”的列的数据框?
例如 - 给定以下数据:
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