मैं अपने डेटा के बाहर एक सूची का उपयोग करना चाहता हूं। उस डेटा में डेटा का एक नया कॉलम क्या होना चाहिए, यह सूचित करने के लिए तालिका। इस मामले में, data.table विशेषता के अनुरूप सूची तत्व की लंबाई;

# dummy list. I am interested in extracting the vector length of each list element
l <- list(a=c(3,5,6,32,4), b=c(34,5,6,34,2,4,6,7), c = c(3,4,5))

# dummy dt, the underscore number in Attri2 is the element of the list i want the length of
dt <- data.table(Attri1 = c("t","y","h","g","d","e","d"), 
                 Attri2 = c("fghd_1","sdafsf_3","ser_1","fggx_2","sada_2","sfesf_3","asdas_2"))

# extract that number to a new attribute, just for clarity
dt[, list_gp := tstrsplit(Attri2, "_", fixed=TRUE, keep=2)]

# then calculate the lengths of the vectors in the list, and attempt to subset by the index taken above
dt[,list_len := '[['(lapply(1, length),list_gp)]

Error in lapply(l, length)[[list_gp]] : no such index at level 1

मैंने list_len कॉलम को ५,३,५,८,८,३,८ होने की परिकल्पना की थी

1
Sam 30 अप्रैल 2021, 10:27
अभी देखा कि मैंने tstrsplti परिणाम को संख्यात्मक में बदलने की उपेक्षा की थी, जैसे @Sirius ने पोस्ट किया था
 – 
Sam
30 अप्रैल 2021, 10:44

1 उत्तर

सबसे बढ़िया उत्तर

कुछ चीजें।

  1. tstrsplit आपको एक स्ट्रिंग देता है। संख्या में परिवर्तित करें।
  2. [[ वहां निर्माण के बारे में निश्चित नहीं है, प्रस्तावित समाधान देखें:

dt[, list_gp := as.numeric( tstrsplit(Attri2, "_", fixed=TRUE, keep=2)[[1]] )]

dt[, list_len := sapply( l[ list_gp ], length ) ]

आउटपुट:


> dt
   Attri1   Attri2 list_gp list_len
1:      t   fghd_1       1        5
2:      y sdafsf_3       3        3
3:      h    ser_1       1        5
4:      g   fggx_2       2        8
5:      d   sada_2       2        8
6:      e  sfesf_3       3        3
7:      d  asdas_2       2        8

2
Sirius 30 अप्रैल 2021, 10:39
1
धन्यवाद, मैंने आपके द्वारा पोस्ट किए गए चरित्र की बात देखी। लेकिन हाँ, शायद मैं आपके आसान और बेहतर दृष्टिकोण के बजाय [[ सबसेटिंग में शामिल हो गया। बहुत धन्यवाद।
 – 
Sam
30 अप्रैल 2021, 10:48