R 数据帧的快速创建
有没有一种方法可以比我在下面创建的data.frame更快或更智能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", "
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]
,例如?