rbind数据框列表,包含一列字符和数字

时间:2012-11-29 20:34:30

标签: r dataframe rbind

我有两个具有相同列名但有不同行数的数据框的列表,rbind.fill可以帮助将它们组合成一个大数据框,但问题是df1中的第一列是数字数据和df2是字符数据,当它们合并时,字符数据全部变为1,我已经搜索过,但没有解决问题,任何帮助都将不胜感激。一个小例子是:

station <- c(1:10)
value <- c(101:110)  
df1 <- data.frame(cbind(station,value)) 
station <- c("a","b")
value <- c(101:102)  
df2 <- data.frame(cbind(station,value)) 
data1 <- rbind.fill(df1,df2)

我希望角色仍然是角色,谢谢。

2 个答案:

答案 0 :(得分:2)

如果它将数字转换为数字,则不是字符,这是一个因素。使用str进行检查。这将让你前进:

df2$station <- as.character(df2$station)

编辑:或者在您创建数据框时使用保持R将字符串转换为因子:

df2 <- data.frame(cbind(station,value), stringsAsFactors = FALSE) 

控制台输出:

> station <- c(1:10)
> value <- c(101:110)  
> df1 <- data.frame(cbind(station,value)) 
> station <- c("a","b")
> value <- c(101:102)  
> df2 <- data.frame(cbind(station,value)) 
> df2$station <- as.character(df2$station)
> 
> library(plyr)
> data1 <- rbind.fill(df1,df2)
> data1
   station value
1        1   101
2        2   102
3        3   103
4        4   104
5        5   105
6        6   106
7        7   107
8        8   108
9        9   109
10      10   110
11       a     1
12       b     2

答案 1 :(得分:2)

您似乎不必使用rbind.fill,因为您的数据框确实具有相同的列名。试试rbind即可。 你声明你正在使用一个列表,所以你可能想用do.call知道这个小技巧:

df1 <- data.frame(station = 1:10, value = 101:110) 
df2 <- data.frame(station = c("a","b"), value = 101:102) 
(data1 <- rbind.fill(df1,df2))
rbind(df1,df2)

dfl <- list(df1,df2)
do.call("rbind",dfl)

请注意,我有点“清理”了您的示例代码。您不必连接所有内容。