bro*_*ter 4 r initialization matrix dataframe
有没有更好的方法来创建一个空白的data.frame,它具有与现有data.frame相同的维度,列名和行名称?
BAM<-read.table(~/myfile) # 10 rows and 10 columns, full of data
print(BAM)
SNP AZ04 AZ05 AZ06 AZ07 AZ08 AZ09 AZ10 AZ11 AZ12
1 0512930_3028 1 15 3 3 2 0 2 9 4
2 0512933_33862 0 7 1 5 18 2 4 10 5
3 0512933_33866 0 7 1 5 18 2 4 10 5
4 0512933_49263 4 12 15 14 14 9 7 15 15
5 0512933_315059 2 3 6 6 18 3 11 3 14
6 0512933_319854 4 3 10 6 8 2 6 12 8
7 0512933_330379 0 12 5 0 16 1 8 10 7
8 0512933_359868 9 9 7 9 18 9 16 14 11
9 0512933_390380 8 18 19 10 26 10 12 17 18
10 0512933_405563 2 10 13 10 17 14 10 13 14
Initial.matrix<-matrix(nrow=nrow(BAM), ncol=ncol(BAM), dimnames=list(1:(ncol(BAM)), (colnames(BAM))))
Blank.data.frame<-data.frame(Initial.matrix)
Blank.data.frame$SNP=BAM$SNP
print(Blank.data.frame)
SNP AZ04 AZ05 AZ06 AZ07 AZ08 AZ09 AZ10 AZ11 AZ12
1 0512930_3028 NA NA NA NA NA NA NA NA NA
2 0512933_33862 NA NA NA NA NA NA NA NA NA
3 0512933_33866 NA NA NA NA NA NA NA NA NA
4 0512933_49263 NA NA NA NA NA NA NA NA NA
5 0512933_315059 NA NA NA NA NA NA NA NA NA
6 0512933_319854 NA NA NA NA NA NA NA NA NA
7 0512933_330379 NA NA NA NA NA NA NA NA NA
8 0512933_359868 NA NA NA NA NA NA NA NA NA
9 0512933_390380 NA NA NA NA NA NA NA NA NA
10 0512933_405563 NA NA NA NA NA NA NA NA NA
Run Code Online (Sandbox Code Playgroud)
上面的代码让我得到了我想要的东西.有更清洁或更简单的方法吗?
谢谢,安娜(R的初学者)
只需创建一个副本BAM并乘以所有数字元素NA.
Blank.data.frame <- BAM
Blank.data.frame[,-1] <- Blank.data.frame[,-1] * NA
Run Code Online (Sandbox Code Playgroud)
或者,更一般地说:
Blank.data.frame <- BAM
numCols <- sapply(Blank.data.frame, is.numeric)
Blank.data.frame[,numCols] <- Blank.data.frame[,numCols] * NA
Run Code Online (Sandbox Code Playgroud)