Bunu tek seferde yapamayabilirsiniz, ancak sorununuzu çözecek özel bir işlev var.
Özel İşlev
İşlev str_as_vct()
aşağıdaki gibi tanımlanır:
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
)
}
Tanım
Bir vektör al character
her biri bir sınırlayıcı ile ayrılmış değerlere sahip dizeler ve her dizeyi değerlerinin bir vektörüne bölün.
Kullanma
x
: Bir vektör character
vektörleri sınırlandırılmış değerler olarak temsil eden dizeler.
sep
: Bir character
bağcık. Dizeler tarafından kullanılan sınırlayıcı x
.
transform
: Dönüştürmek için bir işlev character
vektörler istenen veri türünün vektörlerine dönüştürülür.
...
: Diğer argümanlar transform
işlev.
Çözüm
İle silahlı str_as_vct()
sorununuz tek bir ödevde çözülebilir:
df <- data.table::fread(file = "C/MyFolder/file.csv")[
# Select all rows.
,
# Select and transform columns.
.(var1, var2 = str_as_vct(var2))
]
Sonuç
Bir başlangıç verildiğinde df
bunun gibi
df <- tibble(
var1 = 1:3,
var2 = list(
c(1, 2, 3),
c(4, 5, 6),
c(7, 8, 9)
)
)
çözüm bir sonuç vermelidir data.table
aşağıdakilerle 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>
her öğenin nerede var2
is a numeric
vektör.
A'ya dönüştürme tibble
ile as_tibble(df)
verecek:
# A tibble: 3 x 2
var1 var2
<int> <list>
1 1 <dbl [3]>
2 2 <dbl [3]>
3 3 <dbl [3]>