सवाल बड़े डेटा फ्रेम में एक इंडेक्स (न्यूमेरिक आईडी) कॉलम जोड़ें [डुप्लिकेट]


इस प्रश्न का उत्तर यहां दिया गया है:

मेरे पास डेटा फ्रेम में बड़ी सीएसवी फ़ाइल पढ़ी गई है। सीएसवी फ़ाइल में डेटा उपयोगकर्ता की जानकारी का प्रतिनिधित्व करने वाली कई वेबसाइटों से हैं। उदाहरण के लिए यहां डेटा फ्रेम की संरचना है।

user_id, number_of_logins, number_of_images, web
001, 34, 3, aa.com
002, 4, 4, aa.com
034, 3, 3, aa.com
001, 12, 4, bb.com
002, 1, 3, bb.com
034, 2, 2, cc.com

जैसा कि आप डेटा फ्रेम में डेटा लाने के बाद देख सकते हैं user_id अब एक अद्वितीय आईडी नहीं है और इससे सभी विश्लेषण होते हैं। मैं इससे पहले एक और कॉलम जोड़ने की कोशिश कर रहा हूं user_id जो कुछ ऐसा है "generated_uid" और बहुत अधिक सूचकांक का उपयोग करें data.frame उस कॉलम से भरने के लिए। इसे पूरा करने का सबसे अच्छा तरीका क्या है।


44
2018-05-07 13:02


मूल


बढ़ती संख्या के साथ नया कॉलम जोड़ने का एक आसान तरीका है: data.frame$generated_uid <- 1:nrow(data.frame) - Christian Borck


जवाब:


आप संख्याओं का क्रम आसानी से जोड़ सकते हैं

data$ID <- seq.int(nrow(data))

बेशक इसका कोई वास्तविक अर्थ नहीं होगा, इसलिए विश्लेषण में इसका उपयोग नहीं किया जा सकता है।

यदि आप पहले से ही उपयोग कर रहे हैं library(tidyverse), आप उपयोग कर सकते हैं

data <- tibble::rowid_to_column(data, "ID")

95
2018-05-07 13:08





वैकल्पिक का उपयोग करना dplyr पैकेज:

library("dplyr") # or library("tidyverse")

df <- df %>% mutate(id = row_number())

12
2018-03-20 09:24





खैर, अगर मैं आपको सही ढंग से समझता हूं। आप निम्न की तरह कुछ कर सकते हैं।

इसे दिखाने के लिए, मैं पहले एक बनाते हैं data.frame आपके उदाहरण के साथ

df <- 
scan(what = character(), sep = ",", text =
"001, 34, 3, aa.com
002, 4, 4, aa.com
034, 3, 3, aa.com
001, 12, 4, bb.com
002, 1, 3, bb.com
034, 2, 2, cc.com")

df <- as.data.frame(matrix(df, 6, 4, byrow = TRUE))
colnames(df) <- c("user_id", "number_of_logins", "number_of_images", "web")  

फिर आप कॉलम जोड़ने के लिए निम्न पंक्तियों में से एक चला सकते हैं (के अंत में data.frame) उत्पन्न उपयोगकर्ता आईडी के रूप में पंक्ति संख्या के साथ। दूसरी पंक्तियां केवल प्रमुख शून्य जोड़ती हैं।

df$generated_uid  <- 1:nrow(df)
df$generated_uid2 <- sprintf("%03d", 1:nrow(df))

यदि आप पूरी तरह से जेनरेट की गई उपयोगकर्ता आईडी को पहला कॉलम चाहते हैं, तो आप कॉलम को इस प्रकार जोड़ सकते हैं:

df <- cbind("generated_uid3" = sprintf("%03d", 1:nrow(df)), df)

या बस स्तंभों को पुन: व्यवस्थित करें।


5
2018-05-07 13:21





अगर आपका data.frame एक है data.table, आप विशेष प्रतीक का उपयोग कर सकते हैं .I:

data[, ID := .I]

4
2018-03-20 10:27