我有两个具有相同列名但有不同行数的数据框的列表,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)
我希望角色仍然是角色,谢谢。
答案 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)
请注意,我有点“清理”了您的示例代码。您不必连接所有内容。