आप में सक्षम नहीं हो सकता यह करने के लिए एक चैन की नींद सो, लेकिन यहाँ एक कस्टम समारोह है कि आपकी समस्या का समाधान होगा.
कस्टम समारोह
समारोह str_as_vct()
परिभाषित किया गया है के रूप में इस प्रकार है:
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
)
}
विवरण
एक वेक्टर के character
तार के साथ प्रत्येक मान द्वारा अलग एक सीमांकक, और विभाजन में प्रत्येक स्ट्रिंग के लिए एक वेक्टर के अपने मूल्यों.
उपयोग
x
: एक वेक्टर के character
तार प्रतिनिधित्व करते हैं, जो वैक्टर के रूप में सीमांकित मूल्यों.
sep
: एक character
स्ट्रिंग. के सीमांकक द्वारा प्रयोग किया जाता के तार में x
.
transform
: एक समारोह को बदलने के लिए character
वैक्टर में वैक्टर के वांछित डेटा प्रकार.
...
: आगे बहस करने के लिए transform
समारोह.
समाधान
के साथ हथियारों से लैस str_as_vct()
, आपकी समस्या का हल किया जा सकता है में एक एकल असाइनमेंट:
df <- data.table::fread(file = "C/MyFolder/file.csv")[
# Select all rows.
,
# Select and transform columns.
.(var1, var2 = str_as_vct(var2))
]
परिणाम
एक प्रारंभिक df
इस तरह
df <- tibble(
var1 = 1:3,
var2 = list(
c(1, 2, 3),
c(4, 5, 6),
c(7, 8, 9)
)
)
समाधान उपज चाहिए एक data.table
निम्नलिखित के साथ 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>
जहां प्रत्येक तत्व का var2
एक numeric
सदिश ।
रूपांतरण करने के लिए एक tibble
के माध्यम से as_tibble(df)
निकलेगा:
# A tibble: 3 x 2
var1 var2
<int> <list>
1 1 <dbl [3]>
2 2 <dbl [3]>
3 3 <dbl [3]>