R 将数据帧的各个部分粘在一起

R 将数据帧的各个部分粘在一起,r,R,在上面的数据集中,我有一组V2坐标(lat和long),它们属于某些字符串,显示在V1中。我想用胶水把那些在结尾和开头分别有相同坐标的字符串粘在一起。例如:字符串9以与字符串9693以相同的坐标结尾,可以说字符串9698是字符串9的延续。我怎样才能把它们粘在一起?新字符串的名称无关紧要 上面的数据集是我拥有的一个样本。我正在寻找一种方法,将我的数据集中包含>10^6个观察值的所有这些字符串粘在一起。下面是一个示例数据集,它显示了您的情况: dat% 分组依据(v1)%>% 变异(lastv1=i

在上面的数据集中,我有一组V2坐标(lat和long),它们属于某些字符串,显示在V1中。我想用胶水把那些在结尾和开头分别有相同坐标的字符串粘在一起。例如:字符串9以与字符串9693以相同的坐标结尾,可以说字符串9698是字符串9的延续。我怎样才能把它们粘在一起?新字符串的名称无关紧要


上面的数据集是我拥有的一个样本。我正在寻找一种方法,将我的数据集中包含>10^6个观察值的所有这些字符串粘在一起。

下面是一个示例数据集,它显示了您的情况:

dat%
分组依据(v1)%>%
变异(lastv1=if_else(任何(相同),lastv1[1],v1[1]))%>%
解组()%>%
变异(v1=lastv1)%>%
#过滤器(!相同)%>%
选择(-same,-lastv1)
##tibble:9 x 3
#v1 v2 v3
#     
# 1     1     1    11
# 2     1     2    12
# 3     1     3    13
# 4     1     3    13
# 5     1     4    14
# 6     1     5    15
# 7     3     6    16
# 8     3     7    17
# 9     3     8    18
我在这里留下了一个注释掉的
过滤器
:如果您需要减少重复的点,那么取消注释它,您将拥有一个连续的字符串

另一种方法是计算每组点之间的距离,并根据低于阈值的距离确定“相同性”。例如,
geosphere::distHaversine
或更准确地说,
geosphere::distVincentyEllipsoid
将为您提供每对点之间的距离


我没有意识到您只关注比较字符串:(1)我收回浮点讨论,因为您正在回避这一点;(2)由于我们没有使用
diff
(或公差),所以它会稍微改变一些事情

dat2%
分组依据(V1)%>%
变异(newV1=if(任意(相同))lastV1[1]else V1[1])%>%
解组()%>%
变异(V1=newV1)%>%
#过滤器(!相同)%>%
选择(-lastV1,-newV1,-相同)
##A tible:10 x 2
#V1 V2
#                     
#  1     0 58.3354616 15.1455364
#  2     0 58.3360446 15.1457141
#  3     0 58.3464673 15.136081 
#  4     0 58.3508979 15.1277296
#  5     9 58.3541105 11.9237896
#  6     9 58.3534139 11.9305822
#  7     9 58.3534139 11.9305822
#  8     9 58.3533332 11.9313722
#  9     9 58.3532568 11.9321196
# 10     9 58.353248 11.9322061 

您的数据中是否有这样的例子?@JonnyPhelps,答案(如果您没有选中)是“否”(
any(重复(dat[,c(“V2”,“V3”))))
为假)。Carl,两个建议:(1)请减少你的数据,因为你的问题和概念可以很容易地分成三组,每组4-5行;(2) 当您根据条件要求发生某些事情时,您的条件确实需要在样本数据中发生;因此,当您要减少和修复样本数据时,请确保您的样本数据至少显示一个“是”和一个“否”的实例。@r2Evan数据集由170万个观察值组成,我包含了一个样本。无论如何,这个问题的答案是一样的。你的问题的另一个复杂之处是浮点数相等的前提。在数字世界(即IEEE-754,这是每种语言的问题)中,浮点数的严格相等并不能保证给出您认为应该得到的答案。我建议您需要限定您的问题,使其包含“在一定范围内”。@r2evans我已更新了我的问题。坦率地说,我不知道你在说什么关于浮点数。我的数字都是有理数,没有浮点数。很棒的代码!几个问题,在我的tibble中,int部分显示NA。我怎样才能摆脱它?当然,我的数据集比样本大,如果我们有1000个观察值,而不是上面的10个,那么代码仍然有效?是在代码之前还是之后?它可能意味着一些事情,但通常会丢失数据或“它可以是任何值”。用它做什么取决于你在做什么。例如,有时您需要保留它,因为否则您会对分析产生偏见。在其他情况下,您可以删除它,因为它不是一个“完整的观察”。所以为了回答您的问题,类似于
%>%filter(!is.na(V1))
(允许其他列为
na
)或
%>%filter(complete.cases()
(如果任何字段为
na
),则删除行)。
    V1            V2
1   0   58.3354616 15.1455364
2   0   58.3360446 15.1457141
3   0   58.3364476 15.1458118
4   0   58.3368139 15.1459143
5   0   58.3372234 15.1459975
6   0   58.3380975 15.1460381
7   0   58.339002 15.1459897
8   0   58.339663 15.1457799
9   0   58.3402414 15.145495
10  0   58.3411902 15.1447415
11  0   58.3422411 15.1436215
12  0   58.3433313 15.1419505
13  0   58.3464673 15.136081
14  0   58.3508979 15.1277296
113 9   58.3541105 11.9237896
114 9   58.3534139 11.9305822
10  9693    58.3534139 11.9305822
11  9693    58.3533332 11.9313722
14  9693    58.3532568 11.9321196
12  9693    58.353248 11.9322061