我有一个这样的数据框:
x
TicketID Application Impacted_Systems
1 Web Online; PeopleSoft, Financials
etc
我喜欢做的是创建另一个基于x $ Impacted_Systems的data.frame,将每个项目分隔为“;”到它自己的colum,然后用数据框x对它进行复制以绘制它。
到目前为止,我有这个:
data.frame(do.call('rbind', strsplit(as.character(x$Impacted_Systems),';')))
这会为每个字符串创建以“;”分隔的列两次:
X1 X2 X3 X4 X5 X6 X7
1 Online PeopleSoft Financials Online PeopleSoft Financials Online
任何想法我做错了什么?在这种特殊情况下,应该只有3列,而不是7列。
我试过这个
p<-colsplit(x$Impacted_Systems, ";")
这是期待名字选项。问题是受影响系统的数量会有所不同,这是不固定的。
答案 0 :(得分:1)
# some example data
df <- data.frame(Impacted_Systems = c("foo;bar", "foo;bar1;bar2", "foo;bar1;bar2;bar4;bar4"))
library(plyr)
library(reshape2)
split_names <- llply(as.list(df$Impacted_Systems), function(x){
split_data <- data.frame(rbind(strsplit(x, ";")[[1]]))
names(split_data) <- paste0("Impacted_Systems", 1:length(strsplit(x, ";")[[1]]))
split_data
})
> cbind(df, ldply(split_names))
Impacted_Systems Impacted_Systems1 Impacted_Systems2
1 foo;bar foo bar
2 foo;bar1;bar2 foo bar1
3 foo;bar1;bar2;bar4;bar4 foo bar1
Impacted_Systems3 Impacted_Systems4 Impacted_Systems5
1 <NA> <NA> <NA>
2 bar2 <NA> <NA>
3 bar2 bar4 bar4