कैसे पढ़ने के लिए सीएसवी । फाइलें वैक्टर में डेटा.तालिका पैकेज?

0

सवाल

मैं बनाया एक tibble (नाम लोमो) एक नंबर के साथ और एक वेक्टर के अंदर:

library(tsibble)
library(data.table)

df <- tibble(var1 = 5, var2 = list(c(1,2,3)))

var1   var2
 5   c(1,2,3)

तो मैं बचाया इस tibble एक सीएसवी के रूप में. फ़ाइल की तरह तो:

data.table::fwrite(df, file = "C/MyFolder/file.csv")

अब मैं चाहता हूँ करने के लिए इस फ़ाइल को पढ़ने:

df <- data.table::fread(file = "C/MyFolder/file.csv")

और मैं नए tibble के साथ संख्या और पाठ के अंदर एक सेल:

 var1   var2
   5    1|2|3

कैसे करने के लिए सही ढंग से पढ़ने के लिए एक csv. फ़ाइल प्राप्त करने के क्रम में फिर से एक tibble के साथ एक वेक्टर के अंदर एक सेल?

data.table r
2021-11-22 17:17:04
2

सबसे अच्छा जवाब

2

आप में सक्षम नहीं हो सकता यह करने के लिए एक चैन की नींद सो, लेकिन यहाँ एक कस्टम समारोह है कि आपकी समस्या का समाधान होगा.

कस्टम समारोह

समारोह 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]>
2021-11-22 19:45:31

धन्यवाद, काम करता है, के रूप में चिह्नित सही है. प्रश्न: क्या अगर वहाँ रहे हैं कई कॉलम और जहां वैक्टर कर रहे हैं, मैं नहीं पता है अग्रिम में.
Jack Po

@JackPo स्पष्ट कर सकता? यह लगता है जैसे तुम पूछ रहे हैं दो बातें: (1) क्या अगर ऐसा करने के लिए var2 शामिल एक अज्ञात वितरण के तार की तरह "1|2|3" (प्रतिनिधित्व करते हैं, जो वैक्टर) और अन्य तार की तरह "stuff"; और (2) क्या अगर ऐसा करने के लिए वहाँ रहे हैं कई कॉलम की तरह var2.
Greg

मैं सरल सवाल और आप सही जवाब दे दिया. वास्तविकता में, मैं एक tibble के साथ कई कॉलम और उनमें से कुछ शामिल कर सकते हैं एक वेक्टर
Jack Po

@JackPo हममम...कि एक थोड़ा और अधिक जटिल है । आप हो सकता है एक कठिन समय के बीच भेद (1) कोशिकाओं से युक्त संख्यात्मक वैक्टर की तरह c(1,2,3) थे कि तब्दील में तार की तरह "1|2|3"; और (2) कोशिकाओं निहित है कि तार की तरह "1|2|3" साथ शुरू करने के लिए. आप का उपयोग हो सकता है df %>% across(everything(), str_as_vct) के साथ dplyr पैकेज है, लेकिन हो सकता है आप में निर्माण करने के लिए जाँच करता है को रोकने के लिए अयोग्य स्तंभ से किया जा रहा के रूप में तब्दील NAएस.
Greg

@JackPo भी, धन्यवाद अंकन के लिए मेरा जवाब के रूप में स्वीकार किए जाते हैं! आप कृपया upvote के रूप में अच्छी तरह से?
Greg

@फी hazing के वीडियो में मैं विचार, धन्यवाद
Jack Po

सुधार: आप का उपयोग हो सकता है df %>% mutate( across(everything(), str_as_vct) ) के साथ dplyr पैकेज में । मैं बाहर छोड़ दिया mutate() में मेरे पिछले टिप्पणी.
Greg

@फी Hazing के वीडियो धन्यवाद ...
Jack Po
0

ऐसा लगता है कि अपने csv फ़ाइल से अलग है | तो आप की जरूरत है में fread इस विभाजक के तर्क की तरह:

fread(file = "file.csv", sep="|")

बधाई

2021-11-22 19:14:12

अपने समाधान काम करता है अगर वहाँ है एक सेल में हैं, लेकिन अगर उनमें से कई हैं, तो परिणाम अजीब है (कोशिकाओं विलय कर रहे हैं और एक और सेल जोड़ा गया है). मैं होगा की तरह खोजने के लिए एक सार्वभौमिक समाधान है ।
Jack Po

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में