将字符串分成多个列

D P*_*nto 0 r

我想将下面的数据框分成五列.应在每个" - "之后创建列.注意,一些观察(26和28)有一个额外的字段("uk"和"es").所以在最后一栏中所有观察结果都是26和28应该包含NA.

26                               paid 21.09 - abs - E X1028 - 61,77 - uk.pdf
27                               paid 21.09 - corefunction - mah - 125,66.PDF
28                               paid 21.09 - mrl - mah - 456,96 - es.PDF
29                               paid 21.09 - mollea - inv - 297,50.pdf
30                               paid 21.09 - saless - inv - 117,81.pdf
31                               paid 23.09 - boc - inv - 59,80.pdf
Run Code Online (Sandbox Code Playgroud)

Dav*_*urg 5

使用快速解决方案 data.table

library(data.table) # v 1.9.6+
setDT(df)[, tstrsplit(V1, "-")]
#             V1             V2        V3          V4      V5
# 1: paid 21.09            abs   E X1028       61,77   uk.pdf
# 2: paid 21.09   corefunction       mah   125,66.PDF      NA
# 3: paid 21.09            mrl       mah      456,96   es.PDF
# 4: paid 21.09         mollea       inv   297,50.pdf      NA
# 5: paid 21.09         saless       inv   117,81.pdf      NA
# 6: paid 23.09            boc       inv    59,80.pdf      NA
Run Code Online (Sandbox Code Playgroud)

数据

df <- structure(list(V1 = structure(c(1L, 2L, 4L, 3L, 5L, 6L), .Label = c("paid 21.09 - abs - E X1028 - 61,77 - uk.pdf", 
"paid 21.09 - corefunction - mah - 125,66.PDF", "paid 21.09 - mollea - inv - 297,50.pdf", 
"paid 21.09 - mrl - mah - 456,96 - es.PDF", "paid 21.09 - saless - inv - 117,81.pdf", 
"paid 23.09 - boc - inv - 59,80.pdf"), class = "factor")), .Names = "V1", class = "data.frame", row.names = c(NA, 
-6L))
Run Code Online (Sandbox Code Playgroud)