R - 进行最后一次观察不同次数

问题描述 投票:0回答:1

我有一个冗长的数据集,其中一列包含在海湾中的两个(或每个同时一个)位置(A或B)中的一个存在/不存在的游轮。目前,我的邮轮数据连续几个月每半小时与一系列时间戳匹配。我希望在这个新的时间刻度上表达存在/不存在的A和/或B的不同次数。每艘游轮都有不同的次数(以小时为单位)。

我从这样的事情开始:

     [,1]    [,2] [,3]
[1,] "Ship1" "A"  "4" 
[2,] "Ship2" "B"  "5" 
[3,] NA      NA   NA  
[4,] NA      NA   NA  
[5,] NA      NA   NA  
[6,] "Ship3" "A"  "2" 
[7,] NA      NA   NA

我想要这个:

     [,1]    [,2]  [,3]
[1,] "Ship1" "A"   "4" 
[2,] "Ship2" "A,B" "5" 
[3,] NA      "A,B" NA  
[4,] NA      "A,B" NA  
[5,] NA      "B"   NA  
[6,] "Ship3" "A,B" "2" 
[7,] NA      "A"   NA

我尝试了一些无用的东西(还有一些崩溃):

data$fillAnchorA = na.locf(data$AnchorageA, na.rm = F, mingap = lag(data$hoursPresent))

data$fillAnchorB = rep(na.locf(data$AnchorageB, na.rm = F), length(data$hoursPresent))

data$fillAnchorB = rep(data$AnchorageB, length(mastercruisedata$hoursPresent))

(AnchorageA的所有游轮都到达锚地A(用A表示),AnchorageB对于到达锚地B的船只有相同的情况。 “fillAnchorA”和“fillAnchorB”是我想要(col2)所需输出的地方。我认为保持A和B分开会更容易但也许不是吗?我在这里有点不知所措。

r repeat locf
1个回答
0
投票

免责声明:这是残酷的。肯定有更好的办法...

  • 首先,我创建数据框。
  • 接下来,我添加一个带有行索引的列,以便于引用。
  • 然后我创建一个fill函数,它接受当前行索引,重复次数,要重复的字符以及数据帧中的行数。该函数生成的数组包含NA或字符c的运行。
  • 最后,我使用pmap来遍历数据框中不包含NAs的行,并为每个行创建数组,如上所述。第二个pmap调用遍历这些数组,将排序的,唯一的,非NA值粘贴在一起。然后将其添加到原始数据框的相应列中。
library(dplyr)
library(magrittr)
library(purrr)

# Create data frame
df <- data.frame(Ship = c("Ship1", "Ship2", NA, NA, NA, "Ship3", NA),  
                 l = c("A", "B", NA, NA, NA, "A", NA),  
                 r = c(4, 5, NA, NA, NA, 2, NA))

# Add row numbers
df %<>% 
  tibble::rowid_to_column() 

# Fill function
fill_foo <- function(id, n, c, nr = nrow(df)){
  tmp <- rep(NA, nr)
  tmp[id:(id+n-1)] <- as.character(c)
  tmp
}

# Go through each no-NA row
df$l <- with(df %>% na.omit(), pmap(list(rowid, r, l), fill_foo)) %>% 
  pmap(function(...)paste(sort(unique(na.omit(unlist(c(...))))), collapse = ",")) %>% 
  unlist

# Print results
print(df)
#>   rowid  Ship   l  r
#> 1     1 Ship1   A  4
#> 2     2 Ship2 A,B  5
#> 3     3  <NA> A,B NA
#> 4     4  <NA> A,B NA
#> 5     5  <NA>   B NA
#> 6     6 Ship3 A,B  2
#> 7     7  <NA>   A NA

reprex package创建于2019-02-25(v0.2.1)

© www.soinside.com 2019 - 2024. All rights reserved.