这是一个相当少的复制代码。真实的数据集比较大,因子也比较多,所以手动列出因子是不切实际的。数据上还有更有趣的转换,我想继续使用 dplyr。
library(dplyr)
a = data.frame(f=factor(c("a", "b")), g=c("a", "a"))
b = data.frame(f=factor(c("a", "c")), g=c("a", "a"))
a = a %>% group_by(g) %>% mutate(n=1)
b = b %>% group_by(g) %>% mutate(n=2)
rbind(a,b)
这会产生:
# A tibble: 4 x 3
# Groups: g [1]
f g n
<chr> <fctr> <dbl>
1 a a 1
2 b a 1
3 a a 2
4 c a 2
Warning messages:
1: In bind_rows_(x, .id) : Unequal factor levels: coercing to character
2: In bind_rows_(x, .id) :
binding character and factor vector, coercing into character vector
3: In bind_rows_(x, .id) :
binding character and factor vector, coercing into character vector
这些警告很烦人,如果我不使用,它们实际上会消失group_by
:
> a = data.frame(f=factor(c("a", "b")), g=c("a", "a"))
> b = data.frame(f=factor(c("a", "c")), g=c("a", "a"))
> a = a %>% mutate(n=1)
> b = b %>% mutate(n=2)
> rbind(a,b)
f g n
1 a a 1
2 b a 1
3 a a 2
4 c a 2
显式转换为data.frame
之前rbind
也可以:
> rbind(data.frame(a),data.frame(b))
f g n
1 a a 1
2 b a 1
3 a a 2
4 c a 2
是否有一种简单的方法使用基本 R 或 dplyr rbind
/bind_rows
自动合并这些因素及其级别,而不是将它们转换为字符(这对我来说意义不大),同时仍然使用 dplyr 进行数据转换?
我发现https://stackoverflow.com/a/30468468/388803提出了一种手动合并因素的解决方案,但这非常冗长。
我的实际用例是加载两个 .csv 文件read.table
,进行一些数据转换,然后合并数据,因为它们是互补的。我目前的解决方法是data.frame(data)
在数据转换结束时调用。我想知道为什么 dplyr/tibble 不会自动合并因子,因为在这种情况下看起来很安全。这是可以改进的东西吗?