将一个数据帧复制到另一个数据帧

时间:2018-03-16 09:03:38

标签: r dataframe matrix

我正在尝试将数据从一个数据帧添加到更大的数据帧中。基本上,在我的情况下,“df”是一个行长度为376的数据框,但我想将这376个项目放入“数据”中,其行长度为10000.我这样做的原因是因为我的数据在“df”中,每行限制为376项,每一行都不完整,一旦我将它们连接到更大的“数据”数据框中,我将连接在一起。下面显示的代码问题是,当我尝试将一行“df”转换为一行“数据”时,我得到数字而不是一些应该显示的字母名称(我假设数字是项目在内存中的位置)。如何修复我的代码,以便将实际的项目名称转移到“数据”?

df<-read.table("msigdb.v5.2.symbols.txt", fill = TRUE)
data<-data.frame(matrix(NA,ncol = 10000, nrow = 19337))
for (w in 1:20){
data[w,]<-df[w,]
}

数据[1,1]应该是“AAANWWTGC_UNKNOWN”,而我只是得到“5”

1 个答案:

答案 0 :(得分:1)

这是因为您要将包含因子的data.frame中的行替换为包含逻辑值的data.frame,默认情况下将df值转换为整数。

请看下面的两个例子:

1)矩阵到data.frame

data<-data.frame(matrix(NA,ncol = 3, nrow = 3))
df<-(matrix(data=rep(c("pos1","pos2",3),3),nrow=3,byrow=FALSE))

str(df)
 chr [1:3, 1:3] "pos1" "pos2" "3" "pos1" "pos2" "3" "pos1" "pos2" "3"

str(data)
 'data.frame':  3 obs. of  3 variables:
 $ X1: logi  NA NA NA
 $ X2: logi  NA NA NA
 $ X3: logi  NA NA NA

data[1,]<-df[1,]

str(data)
'data.frame':   3 obs. of  3 variables:
 $ X1: chr  "pos1" NA NA
 $ X2: chr  "pos1" NA NA
 $ X3: chr  "pos1" NA NA

2)data.frame to data.frame

data<-data.frame(matrix(NA,ncol = 3, nrow = 3))
df<-data.frame(matrix(data=rep(c("pos1","pos2",3),3),nrow=3,byrow=FALSE))

str(df)
'data.frame':   3 obs. of  3 variables:
 $ X1: Factor w/ 3 levels "3","pos1","pos2": 2 3 1
 $ X2: Factor w/ 3 levels "3","pos1","pos2": 2 3 1
 $ X3: Factor w/ 3 levels "3","pos1","pos2": 2 3 1

str(data)
'data.frame':   3 obs. of  3 variables:
 $ X1: logi  NA NA NA
 $ X2: logi  NA NA NA
 $ X3: logi  NA NA NA

data[1,]<-df[1,]

str(data)
'data.frame':   3 obs. of  3 variables:
 $ X1: int  2 NA NA
 $ X2: int  2 NA NA
 $ X3: int  2 NA NA