r-使用dplyr交叉连接,但只能通过前面的数字



我想打开这个数据帧:

y<- c("1","2","2","3")
n<- c("co","ny","tn","ri")
data <- data.frame(y,n)

进入这个数据帧

y <- c(1,1,2,2,3)
n <- c("co","co","ny","tn","ri")
n2 <- c("ny","tn","ri","ri",NA)
data <- data.frame(y,n,n2)

我在想一些关于交叉连接的问题,但我只需要通过数字n和n+1连接。这是为了生成一个网络,该网络应该随着时间的推移传播信息,在这种情况下,y等于年。

以下是使用tidyverse函数执行此操作的方法。

library(tidyverse)
data %>%
group_by(y) %>%
summarise(n = list(n), 
count = n()) %>%
mutate(n2 = lead(n),
n2 = map2(n2, count, ~if(length(.x)) 
rep(.x, length.out = max(.y, length(.x))) else NA)) %>%
unnest(c(n2, n)) %>%
select(-count)
#   y     n     n2   
#  <chr> <chr> <chr>
#1 1     co    ny   
#2 1     co    tn   
#3 2     ny    ri   
#4 2     tn    ri   
#5 3     ri    NA   

对n+1的联接的建议是正确的,但对于所需的输出,需要n-1。

最初的reprex有y作为字符,这需要是数字的,所以我会在连接之外这样做,否则当表连接到它自己时,需要重复突变:

data <- data %>% 
mutate(y = as.numeric(y))

将表格加入自身:

data %>% 
left_join(data %>% 
mutate(y = y - 1), 
by = "y") 

相关内容

  • 没有找到相关文章

最新更新