Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.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 - Fatal编程技术网

R 组合两个数据帧、相似的行、相似的列(一个列除外)具有不同的值

R 组合两个数据帧、相似的行、相似的列(一个列除外)具有不同的值,r,R,我有两个数据帧,我想合并成一个。一个数据帧中的行并不总是在另一个数据帧中,反之亦然。我想保留两个数据集中的所有行和列。此外,有一列(“标记”)有时对同一感兴趣的行(“ID”)具有不同的值。我的数据集太大,无法手动查找它们。当“Tag”中的值不相同时,我很难创建单独的列。我试过test.output1一个联合或行连接会给你十行,我认为这不是你需要的。它也不会分隔标记列 我想您需要一个合并或join操作 merge(test.df1,test.df2,by=c(“ID”,“Year”),all=TR

我有两个数据帧,我想合并成一个。一个数据帧中的行并不总是在另一个数据帧中,反之亦然。我想保留两个数据集中的所有行和列。此外,有一列(“标记”)有时对同一感兴趣的行(“ID”)具有不同的值。我的数据集太大,无法手动查找它们。当“Tag”中的值不相同时,我很难创建单独的列。我试过
test.output1一个联合或行连接会给你十行,我认为这不是你需要的。它也不会分隔
标记

我想您需要一个
合并
或join操作

merge(test.df1,test.df2,by=c(“ID”,“Year”),all=TRUE)
#ID年份位置标签.x长度物种标签.y
#1 2013年上半年站点1 272 46 1 631
#2 2017年上半年北美3 135
#3 2013年下半年站点2 236 984 2 236
#4 2014年3月3日地点3 150 68 3 755
#5 H34 2015现场1594 65不适用
#6 2014年上半年4 698 12 4 698
这与你在问题中列出的不同,但我认为前提是正确的

编辑。更接近您的问题,这里我们将
Tag.y
更新为
NA
Tag.x
匹配的位置


out一个联合或行连接会给你十行,我认为这不是你需要的。它也不会分隔
标记

我想您需要一个
合并
或join操作

merge(test.df1,test.df2,by=c(“ID”,“Year”),all=TRUE)
#ID年份位置标签.x长度物种标签.y
#1 2013年上半年站点1 272 46 1 631
#2 2017年上半年北美3 135
#3 2013年下半年站点2 236 984 2 236
#4 2014年3月3日地点3 150 68 3 755
#5 H34 2015现场1594 65不适用
#6 2014年上半年4 698 12 4 698
这与你在问题中列出的不同,但我认为前提是正确的

编辑。更接近您的问题,这里我们将
Tag.y
更新为
NA
Tag.x
匹配的位置


out或者使用
dplyr
删除重复项,因此如果
tag.x==tag.y
则只保留
tag.x

library(dplyr)    
test.df3 <- full_join(test.df1, test.df2, by = c("ID", "Year")) %>%
  mutate(tag.y = if_else(tag.x == tag.y, NA_integer_, tag.y))
库(dplyr)
测试3.df3%
mutate(tag.y=if_-else(tag.x==tag.y,NA_-integer,tag.y))

或者使用
dplyr
删除重复项,因此如果
tag.x==tag.y
则只保留
tag.x

library(dplyr)    
test.df3 <- full_join(test.df1, test.df2, by = c("ID", "Year")) %>%
  mutate(tag.y = if_else(tag.x == tag.y, NA_integer_, tag.y))
库(dplyr)
测试3.df3%
mutate(tag.y=if_-else(tag.x==tag.y,NA_-integer,tag.y))

您可能会使用
dplyr::left_join(test.df1,test.df2,by=c(“ID”,“Year”))
。在函数中,您还可以显式声明添加到具有匹配名称的列中的后缀(即标记)。这假设每一行至少有一个ID和年份可用于对它们进行配对。您可以使用
merge
from
base R
合并(test.df1,test.df2,by=c('ID','Year'),all=TRUE)
我也在研究它,@akrun,但输出不同。。。不确定是OP还是其他什么。如何将
H12/Length
的值设置为20?我在
test.df1
中有行,但在
test.df2
中没有行,反之亦然,因此
left\u join()
right\u join()
函数会删除需要保留的行
merge()
保留两个数据帧中的所有行您可能会使用
dplyr::left\u join(test.df1,test.df2,by=c(“ID”,“Year”))
。在函数中,您还可以显式声明添加到具有匹配名称的列中的后缀(即标记)。这假设每一行至少有一个ID和年份可用于对它们进行配对。您可以使用
merge
from
base R
合并(test.df1,test.df2,by=c('ID','Year'),all=TRUE)
我也在研究它,@akrun,但输出不同。。。不确定是OP还是其他什么。如何将
H12/Length
的值设置为20?我在
test.df1
中有行,但在
test.df2
中没有行,反之亦然,因此
left\u join()
right\u join()
函数会删除需要保留的行
merge()
保留两个数据帧中的所有行使用
dplyr
后,我建议使用
dplyr::if_else
代替基
ifelse
,因为它对类有更好的保护。(在这种情况下,顺便说一句,它会抱怨,因为
NA
从技术上讲是class
“逻辑的”
,而
标记。*
列都是
“整数”
。正确的方法是使用文本
NA\u整数
,或者像
Tag.y[NA]
,它返回
NA
的正确变体)谢谢(你们两个)的提示!实际上,我有一些行,其中
tag.x
tag.y
的值相同,因为您使用的是
dplyr
,我建议使用
dplyr::if_else
来代替基
ifelse
,因为它对类有更好的保护。(在这种情况下,顺便说一句,它会抱怨,因为
NA
从技术上讲是class
“逻辑的”
,而
标记。*
列都是
“整数”
。正确的方法是使用文本
NA\u整数
,或者像
Tag.y[NA]
,它返回
NA
的正确变体)谢谢(你们两个)的提示!实际上,我确实有一些行,其中
tag.x
tag.y
是相同的值。谢谢,这很有帮助!。我一直在尝试
join()
功能,但我想保留的行将被删除。我修正了输出
H12/Tag.y
不应该是
NA
哪个
join
函数?有几个。在这种情况下,我倾向于