将列表中的成对因素拉入 R 中的 2 列数据框

Pulling Pairs of Factors from a within a list into a 2-column dataframe in R

我是 r 的新手,我正在尝试将列表中并排的成对因子放入数据框中,以便我可以将它们导出为 GEPHI 的边。我正在尝试创建一个数据集,该数据集就像每个用户旅程的购物清单,其中每个边缘都是从一个购物点到另一个购物点的旅程。

这是我正在测试的示例数据:

a <- c("a","a","a","b","b","a","a","b","a","a","c","d","c")
b <- c(12,22,44,22,33,55,33,66,88,55,33,66,77)
a1 <- data.frame(a,b)
b1 <- tapply(a1$b, a1$a, list)

看起来像这样:

$a
[1] 12 22 44 55 33 88 55

$b
[1] 22 33 66

$c
[1] 33 77

$d
[1] 66

因此,“$a、$b、$c、$d”将是个人用户,其中的列表将是交易旅程。我希望第一行是“12 22”,然后第二行是“22 44”……最后一行是“33 77”。

到目前为止,我已经创建了名为 "pairsfunction" 的函数,并尝试使用 lapply 但它似乎不起作用。

这是我目前的情况:

pairingfunction <- function(x) {
  pairdf <- data.frame()
  for (i in 1:(length(x)-1)){  
    a <- x[i] 
    b <- x[(i+1)]
    pairdf[(nrows(pairdf)+1)] <- a
    pairdf[(nrows(pairdf))] <- b
  } return(pairdf)
}

lapply(b1, pairingfunction)

如果有人可以帮助修复该功能或让我知道比使用 lapply 更好的方法,那就太好了。谢谢

您可以移动和绑定列表元素。将其包装在 lapply 中以对列表中的每个元素执行此操作。您可以将其包装在 do.call(rbind, ...) 中以得到矩阵形式。

do.call(rbind, lapply(b1, function(x) cbind(x[-length(x)], x[-1])))

您可以利用 tidyr 包中的 nest() 函数:

library(tidyr)
library(dplyr)

a <- c("a","a","a","b","b","a","a","b","a","a","c","d","c")
b <- c(12,22,44,22,33,55,33,66,88,55,33,66,77)
df <- data.frame(user = a, touchpoint = b)

df %>% nest(touchpoint)

#   user                       data
# 1    a 12, 22, 44, 55, 33, 88, 55
# 2    b                 22, 33, 66
# 3    c                     33, 77
# 4    d                         66