इस शपथ ली है सका काम नहीं किया, जब मैं abomination नीचे लिख रहा था सब कमाल के हैं, लेकिन अब यह करता है:
## self contained example:
txt <- "col1 col2
Bob John
Tom Bob
Frank Jane
Jim Bob
Tom Bob"
dat <- read.table(textConnection(txt), header = TRUE)
बस स्तरों का अद्वितीय सेट की गणना और
> dat3 <- dat
> lev <- as.character(unique(unlist(sapply(dat, levels))))
> dat3 <- within(dat3, col1 <- factor(col1, levels = lev))
> dat3 <- within(dat3, col2 <- factor(col2, levels = lev))
> str(dat3)
'data.frame': 5 obs. of 2 variables:
$ col1: Factor w/ 6 levels "Bob","Tom","Frank",..: 1 2 3 4 2
$ col2: Factor w/ 6 levels "Bob","Tom","Frank",..: 5 1 6 1 1
> data.matrix(dat3)
col1 col2
[1,] 1 5
[2,] 2 1
[3,] 3 6
[4,] 4 1
[5,] 2 1
: एक कारक के लिए प्रत्येक colX
मजबूर [मूल:! दिखाने के लिए कैसे मूर्खता से जटिल और समझ से परे एक यह एक वास्तव में कड़ी मेहनत की कोशिश करता है आर कोड लिख सकते हैं] सुनिश्चित नहीं हैं कि यह विशेष रूप से eleg है चींटी (और यह नहीं है), लेकिन ...
हम पहले डेटा असूचीबद्ध:
tmp <- unlist(dat)
तो गणना अद्वितीय स्तरों
lev <- as.character(unique(tmp))
और फिर पुनर्गठन tmp
(ऊपर से) मूल डेटा के समान आयामों में वापस, डेटा.फ्रेम (तारों को संरक्षित) में परिवर्तित करें, इस डेटा फ्रेम पर लापरवाही से ऊपर, गणना की गई lev
के साथ एक कारक बनाना, और अंत में डेटा फ्रेम पर समन्वयित करें।
dat2 <- data.frame(lapply(data.frame(matrix(tmp, ncol = ncol(dat)),
stringsAsFactors = FALSE),
FUN = factor, levels = lev))
देता है कौन सा:
> dat2
X1 X2
1 Bob John
2 Tom Bob
3 Frank Jane
4 Jim Bob
5 Tom Bob
> sapply(dat2, levels)
X1 X2
[1,] "Bob" "Bob"
[2,] "Tom" "Tom"
[3,] "Frank" "Frank"
[4,] "Jim" "Jim"
[5,] "John" "John"
[6,] "Jane" "Jane"
> data.matrix(dat2)
X1 X2
[1,] 1 5
[2,] 2 1
[3,] 3 6
[4,] 4 1
[5,] 2 1
स्वच्छ, साफ और तेजी से। महान एक। IMGO उत्तर से बेहतर है कि @ गैविन ने पोस्ट किया है, हालांकि मैं 'data.frame (लापरवाही (... 'समाधान, आलसी आलसी से बाहर करना चाहूंगा। – aL3xa
+1 आपने मुझे एक समझदार उत्तर में हराया। क्या आप अपना' as.numeric बदल सकते हैं (x $ col1) 'केवल' data.matrix (x) 'के लिए? यदि ऐसा है, तो मैं अपने अनावश्यक उत्तर को हटा दूंगा। –
@ aL3xa - अरे, कोई उचित नहीं, मुझे टाइप किए गए वर्णों की संख्या के लिए अंक प्राप्त करना चाहिए !?; -) –