解压缩字符串并获取字符串

时间:2016-03-16 07:26:14

标签: r

我将在这里解释我的问题。这就是我所拥有的。

个别字符串列

df <- as.data.frame(c("NI",
        "FA",
        "FI",
        "FST",
        "FA,NI",
        "IA,FI,IO",
        "NI,DI",
        "IA,NI,IO",
        "IA,FT,FI",
        "FA,FT,FI",
        "IA,FST,FI"))

names(df) <- "Column_of_strings"

注意:输出可能不会带引号,但它们是字符串。我决定把它们包括在内。

df                   
                         Column_of_strings

                         "NI"
                         "FA"
                         "FI"
                         "FST"
                         "FA,NI"
                         "IA,FI,IO"
                         "NI,DI"
                         "IA,NI,IO"
                         "IA,FT,FI"
                         "FA,FT,FI"
                         "IA,FST,FI"

我想要的是什么:

                         Column_of_strings

                         "NI"
                         "FA"
                         "FI"
                         "FST"
                         "FA","NI"
                         "IA","FI","IO"
                         "NI","DI"
                         "IA","NI","IO"
                         "IA","FT","FI"
                         "FA","FT","FI"
                         "IA","FST","FI"
如果这些字符串组本身可以存储为矢量,那么

甚至会更好。

                         Column_of_strings

                         c("NI")
                         c("FA")
                         c("FI")
                         c("FST")
                         c("FA","NI")
                         c("IA","FI","IO")
                         c("NI","DI")
                         c("IA","NI","IO")
                         c("IA","FT","FI")
                         c("FA","FT","FI")
                         c("IA","FST","FI")

总结:

有没有人知道如何:

  1. 最初解压缩我有的字符串列表
  2. 在每个字符串中分配字符串的子组,用逗号分隔每个所需的字符串。
  3. 理想情况下将子组分配给矢量
  4. 所有建议都表示赞赏!

2 个答案:

答案 0 :(得分:2)

我们split可以使用strsplit获得list vector个。{/ p>

lst <- strsplit(as.character(df[,1]), ',')

如果我们需要在list中执行某些操作,我们可以使用lapply/sapply/vapply等来遍历list元素。例如,

lapply(lst, table) 

答案 1 :(得分:2)

您可以使用tidyr::separate将字符串拆分为多个列,并在必要时插入NA

library(tidyr)
df2 <- separate(df, Column_of_strings, c('str1', 'str2', 'str3'), sep = ',', fill = 'right')
df2

#     str1 str2 str3
#  1    NI <NA> <NA>
#  2    FA <NA> <NA>
#  3    FI <NA> <NA>
#  4   FST <NA> <NA>
#  5    FA   NI <NA>
#  6    IA   FI   IO
#  7    NI   DI <NA>
#  8    IA   NI   IO
#  9    IA   FT   FI
#  10   FA   FT   FI
#  11   IA  FST   FI

如果我们创建索引列:

df2 <- cbind(id = seq_along(df2$str1), df2)

...然后我们可以使用reshape2::melt以长格式(有时比列表更有用)放置数据并删除NA,同时将所有位置信息保存在{{ 1}}和id列:

variable