在R项目中,我想从列中的字符串中提取字符串
A B C Z I P
我想要一个包含gsub
列的新数据框
我认为使用for和|
来制作它,但这并不容易,因为模式提取{{1}}并且我不确定它是否是执行此类任务的最佳和最优雅的方式
答案 0 :(得分:2)
结合strsplit
,unlist
和unique
即可:
#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行数据帧对齐。