Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.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合并两个数据帧列表 < >我想根据一个公共ID变量合并两个数据框列表,考虑下面的例子 set.seed(1) mylist1=data.frame(id=sample(paste0("id",sample(1:5,10,T))),var1=sample(letters[1:26],10,T),stringsAsFactors=F);mylist1=split(mylist1,mylist1$id) set.seed(2) mylist2=data.frame(id=sample(paste0("id",sample(1:5,10,T))),var2=sample(LETTERS[1:26],10,T),stringsAsFactors=F);mylist2=split(mylist2,mylist2$id) mylist1 # $id1 # id var1 # id1 d # # $id2 # id var1 # id2 f # id2 g # id2 w # etc. mylist2 # $id1 # id var2 # id1 V # id1 D # id1 J # # $id3 # id var2 # id3 K # id3 J # id3 Z # etc._R_List_Merge_Dataframe - Fatal编程技术网

使用R合并两个数据帧列表 < >我想根据一个公共ID变量合并两个数据框列表,考虑下面的例子 set.seed(1) mylist1=data.frame(id=sample(paste0("id",sample(1:5,10,T))),var1=sample(letters[1:26],10,T),stringsAsFactors=F);mylist1=split(mylist1,mylist1$id) set.seed(2) mylist2=data.frame(id=sample(paste0("id",sample(1:5,10,T))),var2=sample(LETTERS[1:26],10,T),stringsAsFactors=F);mylist2=split(mylist2,mylist2$id) mylist1 # $id1 # id var1 # id1 d # # $id2 # id var1 # id2 f # id2 g # id2 w # etc. mylist2 # $id1 # id var2 # id1 V # id1 D # id1 J # # $id3 # id var2 # id3 K # id3 J # id3 Z # etc.

使用R合并两个数据帧列表 < >我想根据一个公共ID变量合并两个数据框列表,考虑下面的例子 set.seed(1) mylist1=data.frame(id=sample(paste0("id",sample(1:5,10,T))),var1=sample(letters[1:26],10,T),stringsAsFactors=F);mylist1=split(mylist1,mylist1$id) set.seed(2) mylist2=data.frame(id=sample(paste0("id",sample(1:5,10,T))),var2=sample(LETTERS[1:26],10,T),stringsAsFactors=F);mylist2=split(mylist2,mylist2$id) mylist1 # $id1 # id var1 # id1 d # # $id2 # id var1 # id2 f # id2 g # id2 w # etc. mylist2 # $id1 # id var2 # id1 V # id1 D # id1 J # # $id3 # id var2 # id3 K # id3 J # id3 Z # etc.,r,list,merge,dataframe,R,List,Merge,Dataframe,生成的数据帧列表应该如下所示 # $id1 # id var1 var2 # id1 d V # id1 d D # id1 d J # $id2 # id var1 var2 # id2 f NA # id2 g NA # id2 w NA # etc. 你知道我怎么做吗?我们可以用Map来做这件事。从示例数据集中可以清楚地看出,只有一些list元素是两者共有的(基于列表元素的名称) 我们的第一步是使用union获取每个列表中所有唯一的名称。我们用这

生成的数据帧列表应该如下所示

# $id1
# id  var1 var2
# id1 d    V
# id1 d    D
# id1 d    J

# $id2
# id  var1 var2
# id2 f    NA
# id2 g    NA
# id2 w    NA
# etc.

你知道我怎么做吗?

我们可以用
Map
来做这件事。从示例数据集中可以清楚地看出,只有一些
list
元素是两者共有的(基于列表元素的名称)

我们的第一步是使用
union
获取每个
列表中所有
唯一的
名称。我们用这些名称('nm1')对第一个('lst1')和第二个
列表('lst2')进行子集划分。如果缺少元素,则该位置将为
NULL
元素

nm1 <- union(names(mylist1), names(mylist2))
lst1 <- mylist1[nm1]
lst2 <- mylist2[nm1]
之后,我们可以使用
Map
将这两个
列表进行
合并。
列表的相应元素为
merge
d。我们可以使用
MoreArgs
来指定
合并所需的额外参数,而不是使用匿名函数

Map(merge, lst1, lst2,MoreArgs=list(by='id', all=TRUE))
#$id1
#   id var1 var2
#1 id1    d    V
#2 id1    d    D
#3 id1    d    J

#$id2
#    id var1 var2
#1  id2    f   NA
#2  id2    g   NA
#3  id2    w   NA
#4 <NA> <NA>   NA

#$id3
#   id var1 var2
#1 id3    y    K
#2 id3    y    J
#3 id3    y    Z

#$id4
#   id var1 var2
#1 id4    a    D
#2 id4    i    D

#$id5
#   id var1 var2
#1 id5    q    R
#2 id5    q    M
#3 id5    q    D
#4 id5    k    R
#5 id5    k    M
#6 id5    k    D
#7 id5    j    R
#8 id5    j    M
#9 id5    j    D
Map(merge,lst1,lst2,MoreArgs=list(by='id',all=TRUE))
#id1美元
#id var1 var2
#1 id1 d V
#2 id1 d
#3 id1 d J
#id2美元
#id var1 var2
#1 id2 f NA
#2 id2 g NA
#3 id2 w NA
#4NA
#id3美元
#id var1 var2
#1 id3 y K
#2 id3 y J
#3 id3 y Z
#id4美元
#id var1 var2
#1 id4 a D
#2 id4 ID
#id5美元
#id var1 var2
#1 id5 q R
#2 id5 q M
#3ID5QD
#4 id5 k R
#5id5km
#6ID5KD
#7 id5 j R
#8 id5 j M
#9 id5 j D

可能的重复在本例中,您可以将数据加上边框,然后将结果拆分为一个列表您的输入数据和显示的数据不正确
Map(merge,mylist1,mylist2,MoreArgs=list(by='id',all=TRUE))
在本例中,mylist1和mylist2的长度不同,即5和4
Map(merge, lst1, lst2,MoreArgs=list(by='id', all=TRUE))
#$id1
#   id var1 var2
#1 id1    d    V
#2 id1    d    D
#3 id1    d    J

#$id2
#    id var1 var2
#1  id2    f   NA
#2  id2    g   NA
#3  id2    w   NA
#4 <NA> <NA>   NA

#$id3
#   id var1 var2
#1 id3    y    K
#2 id3    y    J
#3 id3    y    Z

#$id4
#   id var1 var2
#1 id4    a    D
#2 id4    i    D

#$id5
#   id var1 var2
#1 id5    q    R
#2 id5    q    M
#3 id5    q    D
#4 id5    k    R
#5 id5    k    M
#6 id5    k    D
#7 id5    j    R
#8 id5    j    M
#9 id5    j    D