Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在数据帧列表中,将列表特定元素中出现的变量值添加到列表所有元素中的同一变量_R_List_Dataframe - Fatal编程技术网

R 在数据帧列表中,将列表特定元素中出现的变量值添加到列表所有元素中的同一变量

R 在数据帧列表中,将列表特定元素中出现的变量值添加到列表所有元素中的同一变量,r,list,dataframe,R,List,Dataframe,我被一个问题困住了,希望能有同样的想法 假设我有一个包含3个数据帧的列表: D1 <- data.frame(ID = sample(1:10), Y = sample(c("yes", "no"), 10, replace =TRUE)) D2 <- data.frame(ID = sample(5:14), Y = sample(c("yes", "no"), 10, replace = TRUE)) D3 <- data.frame(ID = sample(7:16),

我被一个问题困住了,希望能有同样的想法

假设我有一个包含3个数据帧的列表:

D1 <- data.frame(ID = sample(1:10), Y = sample(c("yes", "no"), 10, replace =TRUE))
D2 <- data.frame(ID = sample(5:14), Y = sample(c("yes", "no"), 10, replace = TRUE))
D3 <- data.frame(ID = sample(7:16), Y = sample(c("yes", "no"), 10, replace = TRUE))
L <- list(D1, D2, D3)
names <- c(D1, D2, D3)
names(L) <- names
DF<-as.list(names(L))
L <- mapply(cbind, L, "DF"=DF, SIMPLIFY=F)

D1您可以创建一个单列数据框
IDs
,然后使用
all=T
将所有id添加到每个数据框中,与列表中的每个数据框合并

library(dplyr)
IDs <- data.frame(ID = unique(c(D1$ID, D2$ID, D3$ID)))
L <- lapply(L, function(df) merge(df, IDs, by = "ID", all = T) %>% 
                            mutate(Y = ifelse(is.na(Y), 0, Y)))
库(dplyr)
IDs另一种选择

这将需要一些后期处理清理,但:

set.seed(42)
D1 <- data.frame(ID = sample(1:10), Y = sample(c("yes", "no"), 10, replace =TRUE))
D2 <- data.frame(ID = sample(5:14), Y = sample(c("yes", "no"), 10, replace = TRUE))
D3 <- data.frame(ID = sample(7:16), Y = sample(c("yes", "no"), 10, replace = TRUE))
L <- list(D1, D2, D3)
Reduce(function(a,b) merge(a, b, by="ID", all.x=TRUE, all.y=TRUE), L)
#    ID  Y.x  Y.y    Y
# 1   1  yes <NA> <NA>
# 2   2  yes <NA> <NA>
# 3   3   no <NA> <NA>
# 4   4  yes <NA> <NA>
# 5   5   no  yes <NA>
# 6   6  yes   no <NA>
# 7   7   no   no  yes
# 8   8   no   no  yes
# 9   9   no  yes  yes
# 10 10  yes   no  yes
# 11 11 <NA>   no   no
# 12 12 <NA>  yes  yes
# 13 13 <NA>  yes   no
# 14 14 <NA>   no   no
# 15 15 <NA> <NA>   no
# 16 16 <NA> <NA>  yes
set.seed(42)

D1这里是另一个使用
dplyr

library(dplyr)
Reduce(function(...) full_join(..., by="ID"), L)
#   ID  Y.x  Y.y    Y
#1  10  yes   no  yes
#2   9   no  yes  yes
#3   3   no <NA> <NA>
#4   6  yes   no <NA>
#5   4  yes <NA> <NA>
#6   8   no   no  yes
#7   5   no  yes <NA>
#8   1  yes <NA> <NA>
#9   2  yes <NA> <NA>
#10  7   no   no  yes
#11 14 <NA>   no   no
#12 12 <NA>  yes  yes
#13 11 <NA>   no   no
#14 13 <NA>  yes   no
#15 16 <NA> <NA>  yes
#16 15 <NA> <NA>   no
库(dplyr)
减少(函数(…)完全连接(…,by=“ID”),L)
#ID Y.x Y.Y
#110是不是是
#29不,是的,是的
#3不
#4.6是否
#5.4是的
#6 8不,不,是
#7.5不,是的
#8.1是的
#9.2是的
#107不,不,是的
#11 14没有
#是的是的
#13 11没有
#14 13是否
#15 16是的
#16 15号

谢谢您的回答。这个解决方案对我来说很好,因为它返回数据帧的原始列表。关于将变量Y中的NAs设置为0,有什么建议吗?我使用这样的函数替换NAs:将_zero _设置为_value您可以循环遍历列表,并将“y”列中的
NA
替换为零<代码>L嗯,我们在说话吗?