Ty nemusí být schopen to udělat naráz, ale tady je to vlastní funkce, která bude řešit váš problém.
Vlastní Funkce
Funkce str_as_vct()
je definován takto:
str_as_vct <- function(x, sep = "|", transform = as.numeric, ...) {
sapply(
X = base::strsplit(
x = x,
split = sep,
fixed = TRUE
),
FUN = transform,
... = ...,
simplify = FALSE,
USE.NAMES = FALSE
)
}
Popis
Vzít vektor character
řetězce, jednotlivé hodnoty odděleny oddělovačem, a rozdělit každý řetězec na vektor jeho hodnot.
Použití
x
: Vektor character
řetězce, které představují vektory jako oddělené hodnoty.
sep
: character
string. Oddělovač používá struny v x
.
transform
: Funkce pro transformaci character
vektory na vektory požadovaný datový typ.
...
: Další argumenty transform
funkce.
Řešení
Ozbrojené s str_as_vct()
, váš problém může být vyřešen v jediném úkolu:
df <- data.table::fread(file = "C/MyFolder/file.csv")[
# Select all rows.
,
# Select and transform columns.
.(var1, var2 = str_as_vct(var2))
]
Výsledek
Vzhledem k počáteční df
takhle
df <- tibble(
var1 = 1:3,
var2 = list(
c(1, 2, 3),
c(4, 5, 6),
c(7, 8, 9)
)
)
řešení by měla přinést data.table
s následující str()
Classes ‘data.table’ and 'data.frame': 3 obs. of 2 variables:
$ var1: int 1 2 3
$ var2:List of 3
..$ : num 1 2 3
..$ : num 4 5 6
..$ : num 7 8 9
- attr(*, ".internal.selfref")=<externalptr>
kde každý prvek var2
je numeric
vektorové.
Konverze na tibble
via as_tibble(df)
přinese:
# A tibble: 3 x 2
var1 var2
<int> <list>
1 1 <dbl [3]>
2 2 <dbl [3]>
3 3 <dbl [3]>