将不同长度的字符向量列表转换为R中的一列data.frame

时间:2016-10-19 04:56:51

标签: r

我有400,000个不同长度的字符向量列表,我想将此列表转换为一列data.frame,每行是从原始字符向量连接的字符串。

这是一个例子。

lst <- list()

lst[[1]] <- letters[1:7]
lst[[2]] <- letters[3:5]
lst[[3]] <- LETTERS[15:26]
lst[[4]] <- letters[4:12]

我可以将此列表转换为data.frame,如下所示:

df <- as.data.frame.AsIs(lst, stringsAsFactors=FALSE); df

转换时看起来像这样(非常接近我想要的):

                                 lst
1                a, b, c, d, e, f, g
2                            c, d, e
3 O, P, Q, R, S, T, U, V, W, X, Y, Z
4          d, e, f, g, h, i, j, k, l

在外面看起来还不错,当我查看df对象的类时,它说它是“data.frame”。但是,当我看到它的结构时,我发现我还在处理一个列表。

str(df)

输出:

'data.frame':   4 obs. of  1 variable:
 $ lst:List of 4
  ..$ : chr  "a" "b" "c" "d" ...
  ..$ : chr  "c" "d" "e"
  ..$ : chr  "O" "P" "Q" "R" ...
  ..$ : chr  "d" "e" "f" "g" ... 

我知道data.frame是一个列表,但理想的输出是

> str(df)
'data.frame':   4 obs. of  1 variable:
 $ lst: chr  "a,b,c,d,e,f,g" "c,d,e" "O,P,Q,R,S,T,U,V,W,X,Y,Z" "d,e,f,g,h,i,j,k,l"

我在SO上看过非常相似的问题,但没有一个符合我的期望。 我已经尝试了以下所有,但没有任何效果。任何帮助将不胜感激。

1. mt <- as.matrix(unlist(lst, recursive = FALSE))

2. mt <- unlist(lst, recursive = FALSE)

3. df <- as.data.frame.AsIs(lst, stringsAsFactors=FALSE); df
    df$nlst <- as.character(rep(NA, nrow(df)))
    for(inti in 1:length(df)){
      df$nlst[inti] <- (df$lst[[inti]])
    }

4. df$nlst <- apply(df, 1, unlist)

5. df$nlst <- do.call(rbind, df$lst)

6. df <- as.data.frame(as.matrix(lst))

7. df <- plyr::ldply(lst, rbind)

同样,以上都没有满足我的需求。请帮忙!

1 个答案:

答案 0 :(得分:0)

您可以在pastelist输出,然后拨打data.frame

d1 <- data.frame(Col1=sapply(lst, toString), stringsAsFactors=FALSE)
str(d1)
#'data.frame':   4 obs. of  1 variable:
# $ Col1: chr  "a, b, c, d, e, f, g" "c, d, e" "O, P, Q, R, S, T, U, V, W, X, Y, Z" "d, e, f, g, h, i, j, k, l"