【问题标题】:Twofold, consecutive row selecting starting at different rows in R从 R 中的不同行开始的双重连续行选择
【发布时间】: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 的每种解决方案。

标签: r function dataframe


【解决方案1】:

我不知道您是否需要在新列表中添加一个 ID 列,但另一种方法是:

#create the IDs
eDF$ID <- rep(1:11,2)
#split the data.frame according to those
mylist <- split(eDF, eDF$ID)

输出:

mylist
$`1`
          X        Y ID
1  18.25743 44.69561  1
12 18.26000 44.69740  1

$`2`
          X        Y ID
2  18.25783 44.69564  2
13 18.26022 44.69763  2

$`3`
          X        Y ID
3  18.25823 44.69567  3
14 18.26051 44.69774  3

$`4`
         X        Y ID
4  18.2585 44.69567  4
15 18.2607 44.69787  4
#and so on...

如果您不需要 ID 列,则只能使用 split(eDF, rep(1:11,2)

【讨论】:

    【解决方案2】:

    我们可以修改OP的lapply代码

    lapply(1:11, function(i) eDF[c(i, i+11),])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-27
      • 2013-07-29
      • 2012-08-22
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2020-10-22
      • 1970-01-01
      相关资源
      最近更新 更多