我想打开这个数据帧:
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")