我需要一些关于R中rbind函数的帮助。我有以下2个数据帧。
DF1
col1 col2 col3
row1 0 1 0
row2 txt1 txt2 txt3
row3 txtA txtB txtC
row4 51 93 83
DF2
col1 col2 col3
row5 0.732 0.345 0.532
row6 0.453 0.123 0.456
row7 0.656 0.987 0.321
row8 0.432 0.030 0.754
我想合并这两个数据帧,所以我使用rbind函数来获得以下内容:
col1 col2 col3
row1 0 1 0
row2 txt1 txt2 txt3
row3 txtA txtB txtC
row4 51 93 83
row5 0.732 0.345 0.532
row6 0.453 0.123 0.456
row7 0.656 0.987 0.321
row8 0.432 0.030 0.754
但是,这不是我得到的。我用的时候 合并< - rbind(df1,df2),我得到了
col1 col2 col3
row1 0 1 0
row2 txt1 txt2 txt3
row3 txtA txtB txtC
row4 51 93 83
row5 <NA> <NA> <NA>
row6 <NA> <NA> <NA>
row7 <NA> <NA> <NA>
row8 <NA> <NA> <NA>
因此,当我合并这两个数据帧时,我获得了df2的NA值。能帮助我做到这一点吗?
提前致谢!
答案 0 :(得分:2)
问题是一个数据帧只有数值而另一个没有。
这是一种解决方法:
> data.frame(t(data.frame(t(df1), t(df2))))
col1 col2 col3
row1 0 1 0
row2 txt1 txt2 txt3
row3 txtA txtB txtC
row4 51 93 83
row5 0.732 0.345 0.532
row6 0.453 0.123 0.456
row7 0.656 0.987 0.321
row8 0.432 0.030 0.754
我不确定您是如何阅读数据的,但您可以查看stringsAsFactors
参数,例如read.table
或data.frame
。如果您将stringsAsFactors
设置为FALSE
即可
使用rbind
。
使您的示例可重现:
> df1 = read.table(header=T, stringsAsFactors=F, text=' col1 col2 col3
+ row1 0 1 0
+ row2 txt1 txt2 txt3
+ row3 txtA txtB txtC
+ row4 51 93 83')
> df2 = read.table(header=T, text=' col1 col2 col3
+ row5 0.732 0.345 0.532
+ row6 0.453 0.123 0.456
+ row7 0.656 0.987 0.321
+ row8 0.432 0.030 0.754')
> rbind(df1, df2)
col1 col2 col3
row1 0 1 0
row2 txt1 txt2 txt3
row3 txtA txtB txtC
row4 51 93 83
row5 0.732 0.345 0.532
row6 0.453 0.123 0.456
row7 0.656 0.987 0.321
row8 0.432 0.03 0.754
答案 1 :(得分:2)
问题是df1
列是因素,在读取数据时使用as.is=TRUE
。
示例:
#reproducible df1
df1 <- read.table(text="
col1 col2 col3
row1 0 1 0
row2 txt1 txt2 txt3
row3 txtA txtB txtC
row4 51 93 83",header=TRUE,as.is=TRUE)
#reproducible df2
df2 <- read.table(text="
col1 col2 col3
row5 0.732 0.345 0.532
row6 0.453 0.123 0.456
row7 0.656 0.987 0.321
row8 0.432 0.030 0.754",header=TRUE)
#result
rbind(df1,df2)
# col1 col2 col3
# row1 0 1 0
# row2 txt1 txt2 txt3
# row3 txtA txtB txtC
# row4 51 93 83
# row5 0.732 0.345 0.532
# row6 0.453 0.123 0.456
# row7 0.656 0.987 0.321
# row8 0.432 0.03 0.754
答案 2 :(得分:1)
?rbindlist
似乎也适用于因子列。
df1 <- read.table(text='col1 col2 col3
row1 0 1 0
row2 txt1 txt2 txt3
row3 txtA txtB txtC
row4 51 93 83',header=T,stringsAsFactors=T)
df2 <- read.table(text='col1 col2 col3
row5 0.732 0.345 0.532
row6 0.453 0.123 0.456
row7 0.656 0.987 0.321
row8 0.432 0.030 0.754',header=T)
library(data.table)
rbindlist(list(df1,df2)) #returns factor columns
# col1 col2 col3
#1: 0 1 0
#2: txt1 txt2 txt3
#3: txtA txtB txtC
#4: 51 93 83
#5: 0.732 0.345 0.532
#6: 0.453 0.123 0.456
#7: 0.656 0.987 0.321
#8: 0.432 0.03 0.754