从单元格中提取字符串并将其放入新数据框R中

时间:2016-12-23 00:09:55

标签: r regex extract

在R项目中,我想从列中的字符串中提取字符串

A B C Z I P

我想要一个包含gsub列的新数据框 我认为使用for和|来制作它,但这并不容易,因为模式提取{{1}}并且我不确定它是否是执行此类任务的最佳和最优雅的方式

4 个答案:

答案 0 :(得分:2)

结合strsplitunlistunique即可:

#Steps:
#1) split each element of column with separator as "|"
#2) combine output for all items with unlist
#3) retain unique elements of those


vec = c("A|B|C","B|Z","I|P")

newDF = data.frame(newCol = unique(unlist(lapply(vec,function(x) unlist(strsplit(x,"[|]")) ))),
stringsAsFactors = FALSE)

newDF$newCol
#[1] "A" "B" "C" "Z" "I" "P"

答案 1 :(得分:1)

我们可以使用cSplit

library(splitstackshape)
unique(cSplit(df1, "V1", "|", "long"), by = "V1")

数据

df1 <- data.frame(V1 =  c("A|B|C","B|Z","I|P"))

答案 2 :(得分:1)

从数据帧df开始,使用基数R,我们可以尝试以下方法:

data.frame(col=unique(unlist(strsplit(as.character(df$col), split='\\|'))))
#  col
#1   A
#2   B
#3   C
#4   Z
#5   I
#6   P

或使用dplyr

df %>% 
  mutate(col = strsplit(col, "\\|")) %>% 
  unnest(col) %>% unique 

#     col
#   (chr)
#1     A
#2     B
#3     C
#4     Z
#5     I
#6     P

数据

df <- data.frame(col=c("A|B|C",
                       "B|Z",
                       "I|P"), stringsAsFactors = FALSE)

如果您希望它们成为列的名称,请尝试以下方法:

symbols <- unique(unlist(strsplit(as.character(df$col), split='\\|')))
df <- data.frame(matrix(vector(), 0, length(symbols),
                  dimnames=list(c(), symbols)), stringsAsFactors=F)
df
#[1] A B C Z I P
#<0 rows> (or 0-length row.names)

答案 3 :(得分:1)

带有文本参数输入的scan函数似乎适合此任务:

 st <- c("A|B|C","B|Z","I|P")
 scan(text=st, what="", sep="|")
Read 7 items
[1] "A" "B" "C" "B" "Z" "I" "P"

从您的问题描述或示例中我并不清楚您希望如何将其与原始的3行数据帧对齐。