R中两个长度不等的数据集的求和合并
我试图从另一个长度不同的数据集中向我的数据集中添加两个变量。我有一个coralreef调查数据集,我缺少每个地点和调查区域每次潜水的开始和结束时间 此外,我还有一个表格,其中包含每个场地和区域每次潜水的开始和结束时间: 此表重复了wpt(站点),因为每个站点测量了2个区域,这意味着在该表中,每行都应该是唯一的。在我自己的数据集中,我对wpt有更多的重复,因为我在同一个地点和区域有几次观测。我需要匹配mergingdata的唯一行,以将其合并到返回mergingdata开始和结束时间的fishdata。所以我想通过“wpt”和“zone”进行匹配和合并 这就是我尝试过的:R中两个长度不等的数据集的求和合并,r,merge,R,Merge,我试图从另一个长度不同的数据集中向我的数据集中添加两个变量。我有一个coralreef调查数据集,我缺少每个地点和调查区域每次潜水的开始和结束时间 此外,我还有一个表格,其中包含每个场地和区域每次潜水的开始和结束时间: 此表重复了wpt(站点),因为每个站点测量了2个区域,这意味着在该表中,每行都应该是唯一的。在我自己的数据集中,我对wpt有更多的重复,因为我在同一个地点和区域有几次观测。我需要匹配mergingdata的唯一行,以将其合并到返回mergingdata开始和结束时间的fishda
merge<- merge(fishdata, mergingdata, by="wpt", all=TRUE, sort=FALSE)
mergemergehelp(merge)
的文档说明:
默认情况下,数据帧合并在具有其名称的列上
两者都有,但柱的单独规格可通过以下公式给出:
x和y
由于两个data.frames中都有id列,所以合并函数将使用这些公共列合并数据。因此,在代码中省略id参数应该是可行的
merge<- merge(fishdata, mergingdata, all=TRUE, sort=FALSE)
编辑
查看您的帖子修改,我发现您的数据具有以下结构:
fishdata <- structure(list(date = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = "23.11.2014", class = "factor"),
entry = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = "shore", class = "factor"),
wpt = c(2L, 2L, 2L, 2L, 2L, 2L), zone = structure(c(1L, 1L,
1L, 1L, 1L, 1L), .Label = "DO", class = "factor"), transect = c(1L,
1L, 1L, 1L, 1L, 1L), gps = c(NA, NA, NA, NA, NA, NA), surveyor = structure(c(1L,
1L, 1L, 1L, 1L, 1L), .Label = "ev", class = "factor"), depth_code = c(NA,
NA, NA, NA, NA, NA), phase = structure(c(2L, 2L, 1L, 1L,
1L, 1L), .Label = c("S_PRIN", "S_STOP"), class = "factor"),
species = structure(c(2L, 1L, 2L, 2L, 1L, 1L), .Label = c("IP",
"TP"), class = "factor"), family = c(NA, NA, NA, NA, NA,
NA)), .Names = c("date", "entry", "wpt", "zone", "transect",
"gps", "surveyor", "depth_code", "phase", "species", "family"
), class = "data.frame", row.names = c(NA, -6L))
mergingdata <- structure(list(start.time = c(10.34, 10.57, 10, 10.24, 9.15,
9.39), end.time = c(10.5, 11.1, 10.2, 10.4, 9.3, 9.5), wpt = c(2L,
2L, 3L, 3L, 4L, 4L), zone = structure(c(1L, 2L, 1L, 2L, 1L, 2L
), .Label = c("DO", "LT"), class = "factor")), .Names = c("start.time",
"end.time", "wpt", "zone"), class = "data.frame", row.names = c(NA,
-6L))
我按如下方式进行合并:
merge<- merge(fishdata, mergingdata, by=c("wpt","zone"), all=TRUE, sort=FALSE)
> merge(x = fishdata, y = mergingdata, all.x = TRUE)
wpt zone date entry transect gps surveyor depth_code phase species family start.time end.time
1 2 DO 23.11.2014 shore 1 NA ev NA S_STOP TP NA 10.34 10.5
2 2 DO 23.11.2014 shore 1 NA ev NA S_STOP IP NA 10.34 10.5
3 2 DO 23.11.2014 shore 1 NA ev NA S_PRIN TP NA 10.34 10.5
4 2 DO 23.11.2014 shore 1 NA ev NA S_PRIN TP NA 10.34 10.5
5 2 DO 23.11.2014 shore 1 NA ev NA S_PRIN IP NA 10.34 10.5
6 2 DO 23.11.2014 shore 1 NA ev NA S_PRIN IP NA 10.34 10.5
请注意,我使用了x.all=TRUE
,因为我们想要的是将x对象中的所有行fishdata
与y对象的额外列合并(mergingdata
)。所有这些都是通过使用两个对象的公共列作为索引来实现的 在“按”字段中添加一个额外的名称如何,是否有效<代码>合并谢谢你!它似乎起作用了!!!!非常感谢。起初它似乎是有效的,但它返回的观察结果比我最初得到的要多得多。我的fishdata有4261个观察值,如果我进行此合并,我会得到30491-并且我的tail()只显示nas这是我得到的警告消息:警告消息:1:In[输出看起来正常(除了警告消息,与上面的注释相同),但我得到了近30000个观察值,我的数据集大约有4000个观察值。如果我看一下尾部,我得到了当时的NAs OK,请确保在mergingdata集合上显示这些线的wpt和区域与NA的组合。换句话说,检查是否唯一(mergingdata[,c(“wpt”,“区域”)]
是唯一(fishdata[,c)的子组(“wpt”、“区域”)]
> merge(x = fishdata, y = mergingdata, all.x = TRUE)
wpt zone date entry transect gps surveyor depth_code phase species family start.time end.time
1 2 DO 23.11.2014 shore 1 NA ev NA S_STOP TP NA 10.34 10.5
2 2 DO 23.11.2014 shore 1 NA ev NA S_STOP IP NA 10.34 10.5
3 2 DO 23.11.2014 shore 1 NA ev NA S_PRIN TP NA 10.34 10.5
4 2 DO 23.11.2014 shore 1 NA ev NA S_PRIN TP NA 10.34 10.5
5 2 DO 23.11.2014 shore 1 NA ev NA S_PRIN IP NA 10.34 10.5
6 2 DO 23.11.2014 shore 1 NA ev NA S_PRIN IP NA 10.34 10.5