这是我的数据框列表:
[[1]]
ID Value
A 1
B 1
C 1
[[2]]
ID Value
A 1
D 1
E 1
[[3]]
ID Value
B 1
C 1
Run Code Online (Sandbox Code Playgroud)
我在左侧列中具有唯一(非冗余)ID的单个数据帧之后,在列中复制,并将NULL值设置为0:
ID [1]Value [2]Value [3]Value
A 1 1 0
B 1 0 1
C 1 0 1
D 0 1 0
E 0 1 0
Run Code Online (Sandbox Code Playgroud)
我试过了:
Reduce(function(x, y) merge(x, y, by=ID), datahere)
这提供了单个列表,但不考虑原始值的来源,并且在新行中重复重复的ID.
rbindlist(datahere, use.names=TRUE, fill=TRUE, idcol="Replicate")
Run Code Online (Sandbox Code Playgroud)
这提供了一个单独的列表,其中[x]值编号作为一个名为Replicate的新列,但它仍然不在我想要的结构中,因为ID列有冗余.
使用dplyr/ 这样的事情怎么样purrr:
require(tidyverse);
reduce(lst, full_join, by = "ID");
# ID Value.x Value.y Value
# 1 A 1 1 NA
# 2 B 1 NA 1
# 3 C 1 NA 1
# 4 D NA 1 NA
# 5 E NA 1 NA
Run Code Online (Sandbox Code Playgroud)
或者将NAs替换为0s:
reduce(lst, full_join, by = "ID") %>% replace(., is.na(.), 0);
# ID Value.x Value.y Value
#1 A 1 1 0
#2 B 1 0 1
#3 C 1 0 1
#4 D 0 1 0
#5 E 0 1 0
Run Code Online (Sandbox Code Playgroud)
options(stringsAsFactors = FALSE);
lst <- list(
data.frame(ID = c("A", "B", "C"), Value = c(1, 1, 1)),
data.frame(ID = c("A", "D", "E"), Value = c(1, 1, 1)),
data.frame(ID = c("B", "C"), Value = c(1, 1)))
Run Code Online (Sandbox Code Playgroud)