Я интерпретировал эту проблему как преобразование этих длинных данных в широкий формат. Самая сложная часть этой проблемы - отделить число от описания.
Как только это было сделано, он использовал функцию spread
для конвертации в широкий формат.
df<-structure(list(test22 = structure(c(24L, 20L, 22L, 6L, 2L, 4L,
12L, 8L, 10L, 18L, 14L, 16L, 23L, 19L, 21L, 5L, 1L, 3L, 11L,
7L, 9L, 17L, 13L, 15L), .Label = c("52WkAvg NAV $5.29", "52WkAvg NAV $7.21",
"52WkAvg Premium/Discount -7.26%", "52WkAvg Premium/Discount -9.19%",
"52WkAvg SharePrice $4.91", "52WkAvg SharePrice $6.55", "52WkHigh NAV $5.37",
"52WkHigh NAV $7.34", "52WkHigh Premium/Discount -1.12%", "52WkHigh Premium/Discount -5.88%",
"52WkHigh SharePrice $5.31", "52WkHigh SharePrice $6.88", "52WkLow NAV $5.16",
"52WkLow NAV $7.03", "52WkLow Premium/Discount -11.92%", "52WkLow Premium/Discount -14.43%",
"52WkLow SharePrice $4.58", "52WkLow SharePrice $6.05", "Current NAV $5.21",
"Current NAV $7.11", "Current Premium/Discount -7.10%", "Current Premium/Discount -7.59%",
"Current SharePrice $4.84", "Current SharePrice $6.57"), class = "factor"),
Ticker = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L
), .Label = c("CXE", "MFM"), class = "factor")), class = "data.frame", row.names = c(NA,
-24L))
library(tidyr)
#separate the number for the text
df2<-separate(df, test22, into=c("key", "value"), sep=" (?=[$]*[-\\.0-9]+%*)", extra="merge")
#spread from long to wide
spread(df2, key=key, value=value)
#columns are abridged for clarity
#Ticker 52WkAvg NAV 52WkAvg Premium/Discount 52WkAvg SharePrice 52WkHigh NAV 52WkHigh Premium/Discount 52WkHigh ...
#CXE $5.29 -7.26% $4.91 $5.37 -1.12%
#MFM $7.21 -9.19% $6.55 $7.34 -5.88%