Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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 cbind包含不同列数的数据帧_R_Dataframe_Cbind_Tidyverse_Purrr - Fatal编程技术网

R cbind包含不同列数的数据帧

R cbind包含不同列数的数据帧,r,dataframe,cbind,tidyverse,purrr,R,Dataframe,Cbind,Tidyverse,Purrr,我有几个数据帧,其中包含基本相同的变量,但某些数据帧中缺少一些变量。我想在缺失字段中创建NA值的同时,对数据帧进行cbind(一列*)。举例来说: d1 <- data.frame(y1 = c("var1", "var2", "var3"), y2 = c(3, 2, 4), y3 = c("not_needed", "not_needed2", "not_needed3")) d2 <- data.frame(y

我有几个数据帧,其中包含基本相同的变量,但某些数据帧中缺少一些变量。我想在缺失字段中创建NA值的同时,对数据帧进行cbind(一列*)。举例来说:

d1 <- data.frame(y1 = c("var1", "var2", "var3"),
                 y2 = c(3, 2, 4),
                 y3 = c("not_needed", "not_needed2", "not_needed3"))
d2 <- data.frame(y1 = c("var1", "var3"),
                 y2 = c(2, 1),
                 y3 = c("not_needed", "not_needed2"))
d3 <- data.frame(y1 = c("var1", "var2", "var4"),
                 y2 = c(3, 2, 5),
                 y3 = c("not_needed", "not_needed2", "not_needed3"))

expected_output <- data.frame(y1 = c("var1", "var2", "var3", "var4"),
                              y2.d1 = c(3, 2, 4, NA),
                              y2.d2 = c(2, NA, 1, NA),
                              y2.d3 = c(3, 2, NA, 5))
d1使用的解决方案。我们可以将所有数据帧放在一个列表中,然后使用中的函数将其合并。请注意,我在创建示例数据帧时使用了
stringsAsFactors=FALSE
,以防止出现因子列

library(tidyverse)

d_list <- list(d1, d2, d3)

d_final <- d_list %>%
  map(select, y1, y2) %>%
  reduce(full_join, by = "y1") %>%
  setNames(c("y1", paste0("y2.d", 1:3)))

d_final
#     y1 y2.d1 y2.d2 y2.d3
# 1 var1     3     2     3
# 2 var2     2    NA     2
# 3 var3     4     1    NA
# 4 var4    NA    NA     5
库(tidyverse)
d_列表%
减少(完全联接,通过=“y1”)%>%
集合名(c(“y1”,paste0(“y2.d”,1:3)))
迪乌决赛
#y1 y2.d1 y2.d2 y2.d3
#1 var1 3 2 3
#2 var2 NA 2
#3 var3 4 1 NA
#4 var4 NA NA 5
数据

d1 <- data.frame(y1 = c("var1", "var2", "var3"),
                 y2 = c(3, 2, 4),
                 y3 = c("not_needed", "not_needed2", "not_needed3"),
                 stringsAsFactors = FALSE)
d2 <- data.frame(y1 = c("var1", "var3"),
                 y2 = c(2, 1),
                 y3 = c("not_needed", "not_needed2"),
                 stringsAsFactors = FALSE)
d3 <- data.frame(y1 = c("var1", "var2", "var4"),
                 y2 = c(3, 2, 5),
                 y3 = c("not_needed", "not_needed2", "not_needed3"),
                 stringsAsFactors = FALSE)
d1使用的解决方案。我们可以将所有数据帧放在一个列表中,然后使用中的函数将其合并。请注意,我在创建示例数据帧时使用了
stringsAsFactors=FALSE
,以防止出现因子列

library(tidyverse)

d_list <- list(d1, d2, d3)

d_final <- d_list %>%
  map(select, y1, y2) %>%
  reduce(full_join, by = "y1") %>%
  setNames(c("y1", paste0("y2.d", 1:3)))

d_final
#     y1 y2.d1 y2.d2 y2.d3
# 1 var1     3     2     3
# 2 var2     2    NA     2
# 3 var3     4     1    NA
# 4 var4    NA    NA     5
库(tidyverse)
d_列表%
减少(完全联接,通过=“y1”)%>%
集合名(c(“y1”,paste0(“y2.d”,1:3)))
迪乌决赛
#y1 y2.d1 y2.d2 y2.d3
#1 var1 3 2 3
#2 var2 NA 2
#3 var3 4 1 NA
#4 var4 NA NA 5
数据

d1 <- data.frame(y1 = c("var1", "var2", "var3"),
                 y2 = c(3, 2, 4),
                 y3 = c("not_needed", "not_needed2", "not_needed3"),
                 stringsAsFactors = FALSE)
d2 <- data.frame(y1 = c("var1", "var3"),
                 y2 = c(2, 1),
                 y3 = c("not_needed", "not_needed2"),
                 stringsAsFactors = FALSE)
d3 <- data.frame(y1 = c("var1", "var2", "var4"),
                 y2 = c(3, 2, 5),
                 y3 = c("not_needed", "not_needed2", "not_needed3"),
                 stringsAsFactors = FALSE)

d1应注意,该问题的标题与示例不符。所有这些数据帧的长度==3。我直觉地认为“数据帧的长度”=“nrow(数据帧)”。我已将标题编辑为“…不同数量的行”。谢谢你的评论。这是错误R编码的常见来源。哈哈。我在重新打开的队列b/c中第二次看到了这一点,我正要发布一个base-R解决方案,在我点击“发布”之前它就被关闭了:
Reduce(函数(x,y)merge(x,y[-3],by=“y1”,all=TRUE),list(d1[-3],d2,d3))
应该注意,这个问题的标题与示例不匹配。所有这些数据帧的长度==3。我直觉地认为“数据帧的长度”=“nrow(数据帧)”。我已将标题编辑为“…不同数量的行”。谢谢你的评论。这是错误R编码的常见来源。哈哈。我在重新打开的队列b/c中第二次看到了这一点,我正要发布一个base-R解决方案,在我点击“发布”之前它就被关闭了:
Reduce(函数(x,y)merge(x,y[-3],by=“y1”,all=TRUE),list(d1[-3],d2,d3))