我有两个数据帧是.csv文件,如下所示:
data <- data.frame(ID=c(205,206,207,308,310,400,401,35,36,90),
year=c(2015, 2015,2015,2015,2015, 2015, 2015, 2015,2015, 2015),
ghost=c(0,3,0.5,17.5,37.5,0,87.5,0,0,0),
pumkin=c(3,3,3,3,0,0,37.5,0,0,15),
pirate=c(3,3,3,3,0,0,37.5,0,87.5,3))
和第二个对不同年份的万圣节成本有不同观察结果:
data1 <- data.frame(ID=c(1,12,13,14,15,16,17),
year=c(2017,2017,2017,2017,2017,2017,2017),
ghost=c(0,3,0.5,17.5,37.5,0,87.5),
mermaid=c(0.5,0.5,37.5,37.5,0,0.5,37.5))
我希望拥有的是一个数据框,它将从这两个数据框中获取所有元素:
ID year ghost pumkin pirate mermaid
205 2015 0
206 2015 3
207 2015 0.5
308 2015 17.5
... ...
1 2017 0
12 2017 3
13 2017 0.5
将添加其中一个数据框中不存在的列,并用零填充。
有没有办法做到这一点? 我已经尝试使用merge()和join(),我正在探索使用dplyr来操作我的数据帧的可能性,但感觉我的问题有两个问题,并没有简单的方法来做我想要的。
非常感谢您的帮助, 万圣节快乐!
答案 0 :(得分:2)
dplyr::bind_rows
将处理此
library(dplyr)
bind_rows(data,data1) %>% `[<-`(is.na(.),value=0)
# 1 205 2015 0.0 3.0 3.0 0.0
# 2 206 2015 3.0 3.0 3.0 0.0
# 3 207 2015 0.5 3.0 3.0 0.0
# 4 308 2015 17.5 3.0 3.0 0.0
# 5 310 2015 37.5 0.0 0.0 0.0
# 6 400 2015 0.0 0.0 0.0 0.0
# 7 401 2015 87.5 37.5 37.5 0.0
# 8 35 2015 0.0 0.0 0.0 0.0
# 9 36 2015 0.0 0.0 87.5 0.0
# 10 90 2015 0.0 15.0 3.0 0.0
# 11 1 2017 0.0 0.0 0.0 0.5
# 12 12 2017 3.0 0.0 0.0 0.5
# 13 13 2017 0.5 0.0 0.0 37.5
# 14 14 2017 17.5 0.0 0.0 37.5
# 15 15 2017 37.5 0.0 0.0 0.0
# 16 16 2017 0.0 0.0 0.0 0.5
# 17 17 2017 87.5 0.0 0.0 37.5
答案 1 :(得分:0)
获取所需的输出并根据@ Moody_Mudskipper的答案你可以做到
data2 <- bind_rows(data, data1)
data2[is.na(data2)] <- 0
答案 2 :(得分:0)
要用零填充NA,你可以这样做:
library(dplyr)
bind_rows(data, data1) %>%
mutate_all(funs(ifelse(is.na(.), 0, .)))
或data.table
:
library(data.table)
rbindlist(list(data, data1), fill = TRUE)[,lapply(.SD, function(x){ifelse(is.na(x), 0, x)})]
<强>结果:强>
ID year ghost pumkin pirate mermaid
1: 205 2015 0.0 3.0 3.0 0.0
2: 206 2015 3.0 3.0 3.0 0.0
3: 207 2015 0.5 3.0 3.0 0.0
4: 308 2015 17.5 3.0 3.0 0.0
5: 310 2015 37.5 0.0 0.0 0.0
6: 400 2015 0.0 0.0 0.0 0.0
7: 401 2015 87.5 37.5 37.5 0.0
8: 35 2015 0.0 0.0 0.0 0.0
9: 36 2015 0.0 0.0 87.5 0.0
10: 90 2015 0.0 15.0 3.0 0.0
11: 1 2017 0.0 0.0 0.0 0.5
12: 12 2017 3.0 0.0 0.0 0.5
13: 13 2017 0.5 0.0 0.0 37.5
14: 14 2017 17.5 0.0 0.0 37.5
15: 15 2017 37.5 0.0 0.0 0.0
16: 16 2017 0.0 0.0 0.0 0.5
17: 17 2017 87.5 0.0 0.0 37.5