【发布时间】:2015-10-12 09:55:02
【问题描述】:
我遇到了以下问题。我有一个带有 x 和 y 列的 data.frame 代表空间中的一些点:
X<-c(18.25743,18.25783,18.25823,18.25850,18.25863,18.25878,
18.25885,18.25912,18.25943,18.25962,18.25978,18.26000,
18.26022,18.26051,18.26070,18.26095,18.26118,18.26140,
18.26189,18.26250,18.26310,18.26390)
Y<-c(44.69561,44.69564,44.69567,44.69567,44.69586,
44.69600,44.69637,44.69671,44.69691,44.69701,44.69720,
44.69740,44.69763,44.69774,44.69787,44.69790,44.69791,
44.69795,44.69812,44.69802,44.69812,44.69834)
eDF<-data.frame(X,Y)
现在我的问题是它们在绘图时“排序”错误。所以我需要一个函数将属于一起的两个点的行写在一起(在列表列表中):
1 和 12 是 ID1
2 和 13 是 ID2
3 和 14 是 ID3
...
11 和 22 是 ID11
列表列表中的每个这样创建的列表都应该有其唯一的 ID(只是从 1 到末尾编号)。好吧,因为我在所有长度不同的数据中都遇到了这个问题。
如果第二个连续行选择的起点(12)是灵活的,总是在一半数据之后取第一行。在这个例子中是((rownumber / 2)+1) 12. 好吧,我已经尝试了一些事情,我认为我的方法是正确的,但我自己无法找到解决方案。
这个功能非常接近,但我无法让它从不同的行(1 和 12)开始:
lapply(2:nrow(eDF), function(x) eDF[(x-1):x,])
我还尝试使用 seq 来解决这个问题,如果我可以通过连接两个代码示例来制作列表列表,它将满足我的需求。好吧,我还需要将具体的开始和结束数字更改为动态解决方案。
eDF[(seq(1,to=11,by=1)),] # selecting rows 1 to 11
eDF[(seq(12,to=nrow(eDF),by=1)),] #selecting rows 12 to end
有人有什么想法吗?
【问题讨论】:
-
重塑你的data.frame?
-
好吧,我愿意接受适用于不同 data.frames 的每种解决方案。