R 数据帧的快速创建

R 数据帧的快速创建,r,dataframe,R,Dataframe,有没有一种方法可以比我在下面创建的data.frame更快或更智能 df <- data.frame(ID = rep(c("WT", "KO"), each = 4), Time = rep(c("A", "B", "C", "D"), times = 2), replicate(5,sample(0:100,8,rep=TRUE))) colnames(df)<-c("ID", "Time", c("a", "

有没有一种方法可以比我在下面创建的data.frame更快或更智能

df <- data.frame(ID = rep(c("WT", "KO"), each = 4),
                 Time = rep(c("A", "B", "C", "D"), times = 2),
                 replicate(5,sample(0:100,8,rep=TRUE)))

colnames(df)<-c("ID", "Time", c("a", "b", "c", "d", "e"))

谢谢

您可以使用
expand.grid
进行非数字的唯一组合(有时您甚至可以使用内置的数据集,如
字母
),并在将其包装到矩阵中时只运行一次
示例
,如

set.seed(123)
data.frame(expand.grid(c("WT", "KO"), LETTERS[1:4]), 
           matrix(sample(40), ncol = 5))
#   Var1 Var2 X1 X2 X3 X4 X5
# 1   WT    A 12 36  6 11 24
# 2   KO    A 31 15  1 27 13
# 3   WT    B 16 29  8 22 25
# 4   KO    B 33 14 21 28 26
# 5   WT    C 34 19 32  4 20
# 6   KO    C  2 38 37 35  7
# 7   WT    D 18  3 40 10  5
# 8   KO    D 30 23 17  9 39

对于不太具体的情况,我建议查看@TylerLinkers包,它允许您轻松生成随机数据集


仅作为一般信息,使用
data.table
v1.9.5+您现在可以使用
setnames
通过引用设置新列名。例如,如果您的新数据集被称为
res
,您只需执行以下操作即可

library(data.table) # v1.9.5+
setnames(res, c("ID", "Time", letters[1:5]))

您只需对非数字的唯一组合使用
expand.grid
(有时您甚至可以使用内置的数据集,如
字母
),并在将其包装到矩阵中时仅运行一次
sample
,如

set.seed(123)
data.frame(expand.grid(c("WT", "KO"), LETTERS[1:4]), 
           matrix(sample(40), ncol = 5))
#   Var1 Var2 X1 X2 X3 X4 X5
# 1   WT    A 12 36  6 11 24
# 2   KO    A 31 15  1 27 13
# 3   WT    B 16 29  8 22 25
# 4   KO    B 33 14 21 28 26
# 5   WT    C 34 19 32  4 20
# 6   KO    C  2 38 37 35  7
# 7   WT    D 18  3 40 10  5
# 8   KO    D 30 23 17  9 39

对于不太具体的情况,我建议查看@TylerLinkers包,它允许您轻松生成随机数据集


仅作为一般信息,使用
data.table
v1.9.5+您现在可以使用
setnames
通过引用设置新列名。例如,如果您的新数据集被称为
res
,您只需执行以下操作即可

library(data.table) # v1.9.5+
setnames(res, c("ID", "Time", letters[1:5]))


您可以做一些事情,比如
data.frame(扩展.grid(c(“WT”,“KO”),字母[1:4]),矩阵(示例(40),ncol=5))
谢谢。如何将colnames包含在一起?我可以使用名称而不是setNames吗?我认为仅仅做
names(df)是不可行的,你是打算接受你最后一个问题的答案,还是我的答案没有解决你的问题?我留下了一些评论。你可以做一些事情,比如
data.frame(expand.grid(c(“WT”,“KO”),字母[1:4]),矩阵(示例(40),ncol=5))
谢谢。如何将colnames包含在一起?我可以使用名称而不是setNames吗?我认为仅仅做
names(df)是不可行的,你是打算接受你最后一个问题的答案,还是我的答案没有解决你的问题?我留下了几条评论。为了扩大要采样的数字,我尝试了采样(0:100,8,rep=TRUE)而不是采样(40),但不起作用。你是说类似于
matrix(采样(100),ncol=10)
?100不等于8。我想从一个更大的群体中随机抽取40个数字
矩阵(样本(40)
,1000个数字,甚至是随机抽取的,例如正和负。你的意思是
矩阵(样本(1000,40),5)
?我真的不明白你的意思。
扩展。网格
是获取所有非数值的组合。如果你有3-4个不同的变量,它将省去你计算所有的计数,并编写类似于
rep
的东西。在你的情况下,它不是很需要,因为4除以2,但是你如何对
ID=c(“WT”,“KO”,“CA”)进行计算
时间=字母[1:7]
,例如?为了放大要采样的数字,我尝试了采样(0:100,8,rep=TRUE)而不是采样(40),但它不起作用。你的意思是
矩阵(样本(100),ncol=10)
?100不等于8。我想取我的40个数字
矩阵(样本(40)
从更大的队列中随机抽取1000个数字,甚至是随机抽取的,例如阳性和阴性。您的意思类似于
矩阵(样本(1000,40),5)
?我真的不明白你的意思。
扩展。网格
是获取所有非数值的组合。如果你有3-4个不同的变量,它将省去你计算所有的计数,并编写类似于
rep
的东西。在你的情况下,它不是很需要,因为4除以2,但是你如何对
ID=c(“WT”,“KO”,“CA”)进行计算
时间=字母[1:7]
,例如?