数据框中的可变偏移量和匹配

问题描述

早上好,我想通过数据框实现某些目标,我认为这是可变偏移量和匹配的结合,但是我不太确定如何在R中做到这一点。

采样数据以复制原始和所需的输出

original = data.frame(
  ID = c(1,2,3,2),Type = c("Live","Live","Dead"),Number = c(100,20,30,40,50,NA))

desired = data.frame(
  ID = c(1,NA),Number2 = c(NA,NA,50))

基本上,我想要实现的是当Type =“ Dead”时,当该ID为“ Live”时,我想获得系列中的最后一个Number。相同的ID可能可以存在于多行中(例如ID = 2),但是当ID的Type =“ Dead”时,我想提取该ID所在的最后一个数字。面临的挑战是,并非并非前一行始终具有相同的ID,因此我需要针对所有ID进行某种形式的归纳。

谢谢!

解决方法

这是一种方式

packets = socket.socket(socket.AF_PACKET,socket.SOCK_RAW,socket.ntohs(3))

host_s = socket.socket( socket.AF_PACKET,socket.ntohs(ETH_P_ALL))
host_s.bind((HOST,0))
host_s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,0)

us = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
us.bind((HOST,1900))

在这里,我们按ID对ID进行分组,然后为每个“ Dead”值找到Number所在的“ Number”的最后一个值,如果不是“ Dead”,则返回NA

,

这是基本的R选项

(u <- Reduce(
  rbind,lapply(
    split(original,original$ID),function(v) {
      within(v,Number2 <- ifelse(Type == "Dead",tail(Number[Type == "Live"],1),NA
      ))
    }
  )
))[order(as.numeric(row.names(u))),]

给出

  ID Type Number Number2
1  1 Live    100      NA
2  2 Live     20      NA
3  3 Live     30      NA
4  2 Live     40      NA
5  2 Live     50      NA
6  2 Dead     NA      50