R根据模式拆分列

时间:2016-08-08 17:23:32

标签: r

我使用str_extract_all()获得了很长的向量列表。

head(list)输出如下:

[1] "ARGENTINA"

[[2]]
[1] "BUENOS "   "AIRES"     "BUENOS "   "AIRES"     "ARGENTINA"

[[3]]
[1] "ARGENTINA" "ARGENTINA"

[[4]]
[1] "ARGENTINA" "ARGENTINA"

[[5]]
[1] "ARGENTINA"

[[6]]
[1] "ARGENTINA"

我现在想要将输出移动到excel,每个元素占据同一行中的不同列。例如:

p1          p2         p3       p4     p5
ARGENTINA   NA         NA       NA     NA
BUENOS      AIRES      BUENOS   AIRES  ARGENTINA
ARGENTINA   ARGENTINA  ARGENTINA NA    NA

但是在尝试执行此操作时出现以下错误:

  

data.frame(“ARGENTINA”,c(“BUENOS”,“AIRES”,“BUENOS”,   “AIRES”,:参数意味着不同的行数:1,5,2,3,   6,4,0,9,8,7,38,

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

由于结果来自str_extract_all,只需使用simplify = T参数,该参数将返回矩阵而不是列表。 矩阵由空字符串组成,而不是NA。您可以替换它们,然后将其转换为数据帧。

mat <- str_extract_all(your_string, pattern, simplify = TRUE)

mat[mat == ""] <- NA_character_

df <- as.data.frame(mat)

您现在可以重命名列名称

答案 1 :(得分:0)

由于list元素的长度不同,我们可能需要在NA之前填充rbind,方法是length<-最大length list lst <- lapply(lst, trimws) d1 <- as.data.frame(do.call(rbind, lapply(lst, `length<-`, max(lengths(lst)))), stringsAsFactors=FALSE) names(d1) <- paste0("p", seq_along(d1)) 中的元素。

stri_list2matrix

如果我们使用的是套餐,stringi <{1}}是library(stringi) stri_list2matrix(lst, byrow=TRUE)

的便捷功能
lst <- list("ARGENTINA", c("BUENOS ", "AIRES", "BUENOS ", "AIRES", 
   "ARGENTINA"
 ), c("ARGENTINA", "ARGENTINA"), c("ARGENTINA", "ARGENTINA"), 
    "ARGENTINA", "ARGENTINA")

数据

uDAO = (UserDAO) dao;