0

我有一个冗长的数据集,其中一列包含游轮在海湾的两个(或同时一个)位置(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 分开会更容易,但也许不是?我在这里有点茫然。

4

1 回答 1

0

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

  • 首先,我创建数据框。
  • 接下来,我添加一个带有行索引的列,以便于引用。
  • 然后我创建了一个填充函数,它采用当前行索引、重复次数、要重复的字符以及数据框中的行数。该函数生成的数组包含一个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 包(v0.2.1)于 2019 年 2 月 25 日创建

于 2019-02-25T17:11:42.633 回答