1

我有一个列名相同但行数不同的两个数据框的列表,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)

我希望角色保持原样,谢谢。

4

2 回答 2

2

如果将其转换为数字,则不是字符,而是一个因素。用于str检查这一点。这会让你继续:

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

编辑:或在创建数据框时使用 keep 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
于 2012-11-29T20:43:01.303 回答
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)

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

于 2012-11-29T20:47:54.020 回答