मुझे अपने द्वारा बनाए जा रहे कुछ आरोपण मूल्यांकन सॉफ़्टवेयर का परीक्षण करने की आवश्यकता है और बेंचमार्क डेटासेट प्राप्त करने के लिए संघर्ष कर रहा हूं।

क्या किसी को डेटाफ़्रेम से एक निश्चित मात्रा में डेटा को हटाने का तरीका पता है।

मुझे जो चाहिए वह एक उदाहरण के रूप में:

आपके पास एक डेटासेट है और आप चाहते हैं कि यादृच्छिक 20% पंक्तियों को उस पंक्ति में यादृच्छिक मात्रा में चर को हटा दिया जाए (यानी। NA)

या: कुछ ऐसा जो बदल सकता है

> head(mtcars,n=10)
                   mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Duster 360        14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
Merc 240D         24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Merc 230          22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
Merc 280          19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4

में:

> head(mtcars,n=10)
                   mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4          NA    6 160.0  NA 3.90 2.620   NA   0  1    4    4
Mazda RX4 Wag     21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8  NA 108.0  93  NA    NA  18.61  NA 1    NA   1
Hornet 4 Drive    21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Duster 360        14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
Merc 240D         24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Merc 230          22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
Merc 280          19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4

मैंने कुछ तरीकों की कोशिश की है जो स्तंभों में हेरफेर करते हैं लेकिन इनमें कुछ मूलभूत खामियां हैं जो उन्हें बेकार कर देती हैं।

यहाँ पर यह मेरा पहला हर प्रश्न है, अगर मैंने कुछ भी याद किया है या कुछ गलत किया है, तो कृपया मुझे बताएं।

शुभकामनाएं

1
abdnChap 5 अक्टूबर 2016, 13:45
स्टैक ओवरफ्लो में आपका स्वागत है। कृपया यहां देखें और न्यूनतम प्रतिलिपि प्रस्तुत करने योग्य देने का प्रयास करें उदाहरण जो दूसरों को आपकी मदद करने में मदद कर सकता है।
 – 
Ronak Shah
5 अक्टूबर 2016, 13:47
कृपया देखें stats.stackexchange.com/questions/184741/…
 – 
m-dz
5 अक्टूबर 2016, 13:50
हैलो रोनक, क्या आप प्रतिलिपि प्रस्तुत करने योग्य उदाहरण के बारे में सोच रहे थे? एम-डीजेड, लिंक के लिए धन्यवाद, मैं अब इसे देख रहा हूं यह देखने के लिए कि क्या मैं इसका उपयोग कर सकता हूं।
 – 
abdnChap
5 अक्टूबर 2016, 14:06
हां बढ़िया!
 – 
Ronak Shah
5 अक्टूबर 2016, 14:12
मुझे लगता है कि आपको अपने डेटा में गुम होने के तंत्र के बारे में भी सोचना चाहिए। क्या आप सुझाव दे रहे हैं कि डेटा यादृच्छिक रूप से गायब है, पूरी तरह से यादृच्छिक रूप से गायब है या यादृच्छिक रूप से गायब नहीं है?
 – 
Wietze314
5 अक्टूबर 2016, 14:24

1 उत्तर

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

यह करना चाहिए:

df_new <- as.data.frame(apply(mtcars,2,function(x){
    x[sample(1:length(x),round(length(x)*0.2))] <- NA
    return(x)
}))

लागू करें () कॉलम के माध्यम से जाता है और प्रत्येक कॉलम में नमूना () का उपयोग यादृच्छिक रूप से एनए पर सेट किए जाने वाले मूल्यों के 20% का चयन करने के लिए किया जाता है।

टिप्पणी के बाद नया उत्तर:

यह बेतरतीब ढंग से सभी पंक्तियों के 10% में NA जोड़ता है।

df <- mtcars
random_rows <- sample(1:nrow(df),round(nrow(df)*0.2))
for(i_row in random_rows){
    df[i_row,sample(1:ncol(df),sample(1:ncol(df),1))] <- NA
} 
1
tobiasegli_te 5 अक्टूबर 2016, 14:19
नमस्कार! आपके उत्तर के लिए धन्यवाद लेकिन मुझे नहीं लगता कि यह मेरी ज़रूरत के लिए काम करेगा। मैंने पहले से ही एक फ़ंक्शन बनाया है जो सभी स्तंभों से एक यादृच्छिक प्रतिशत को हटा सकता है, लेकिन मुझे जो कुछ चाहिए वह 10% पंक्तियों को बदल सकता है, यदि आपने प्रत्येक कॉलम से 10% यादृच्छिक रूप से हटा दिया है, तो आप 10% से अधिक पंक्तियों को बदलते हैं। और यदि आप इसे 40% अधिक पर सेट करते हैं, तो सभी पंक्तियाँ बदल जाती हैं।
 – 
abdnChap
5 अक्टूबर 2016, 14:13
तो आपका मतलब है कि 10% पंक्तियों में ठीक एक NA या कम से कम एक NA है?
 – 
tobiasegli_te
5 अक्टूबर 2016, 14:15
यादृच्छिक 10% पंक्तियों में यादृच्छिक मात्रा में NA होना चाहिए।
 – 
abdnChap
5 अक्टूबर 2016, 14:17
मैं इसे स्वीकार करने से पहले आपके सुझाव के साथ थोड़ा खेलने जा रहा हूं, लेकिन इसके दिखने से, यह वही करता है जो मुझे चाहिए था। मुझे इस बात की जानकारी नहीं थी कि जिस डेटाफ्रेम से यह आया है उसे बदलने के लिए कोई नमूना का उपयोग कर सकता है।
 – 
abdnChap
5 अक्टूबर 2016, 14:26
मदद करने में खुशी। वैसे, यदि आप अपने परिणामों को पुन: प्रस्तुत करने योग्य बनाना चाहते हैं, तो sample() चलाने से पहले set.seed(42) जोड़ें। यदि आप बाद के समय बिंदु पर फिर से चलाते हैं, तो यादृच्छिक संख्या जनरेटर उसी यादृच्छिक संख्या को आकर्षित करेगा।
 – 
tobiasegli_te
5 अक्टूबर 2016, 14:29