0

我有一个这样的数据框:

x

TicketID   Application     Impacted_Systems
1          Web             Online; PeopleSoft, Financials
etc

我喜欢做的是基于 x$Impacted_Systems 创建另一个 data.frame 将每个项目用“;”分隔 到它自己的列,然后将它与数据框 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, ";") 

这是期待名称选项。问题是受影响系统的数量会有所不同,它不是固定的。

4

1 回答 1

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
于 2012-10-03T21:02:33.623 回答