निम्नानुसार एक डेटा.table है:
station w_1 w_2
1: 1757 ar_2d lm_h_step
2: 2171 lm_h_step lm_h_step
3: 2812 lm_h_step lm_h_step
4: 4501 lm_h_step lm_h_step
5: 4642 ar_2d lm_h_step
6: 5029 ar_2d lm_h_step
7: 5480 lm_h_step lm_h_step
8: 5779 ar_2d ar_2d
9: 5792 ar_1d ar_2d
मैं प्रति स्टेशन विधियों की आवृत्ति को सारणीबद्ध करना चाहता हूं।
तो अपेक्षित परिणाम होगा
1757 2171 2812 ...
lm_h_step 1 2 2
ar_2d 1 0 0
ar_1d 0 0 0 ...
मैंने अभी तक क्या प्रयास किया है:
apply(dat,1,table)
सही परिणाम का उत्पादन कर रहा है, लेकिन यह उचित रूप से तैयार नहीं है।
कोई विचार?
डेटा का डंप:
structure(list(station = c(1757L, 2171L, 2812L, 4501L, 4642L,
5029L, 5480L, 5779L, 5792L), w_1 = c("ar_2d", "lm_h_step", "lm_h_step",
"lm_h_step", "ar_2d", "ar_2d", "lm_h_step", "ar_2d", "ar_2d"),
w_2 = c("lm_h_step", "lm_h_step", "lm_h_step", "lm_h_step",
"lm_h_step", "lm_h_step", "lm_h_step", "ar_2d", "ar_2d")), .Names = c("station",
"w_1", "w_2"), class = c("data.table", "data.frame"), row.names = c(NA,
-9L))
उत्तर:
जवाब के लिए 5 № 1प्रयत्न dcast/melt
मेल
के लिये data.table
v> = 1.9.5 इसे इस्तेमाल करो
dcast(melt(dat, "station"), value ~ station, length)
# value 1757 2171 2812 4501 4642 5029 5480 5779 5792
# 1: ar_1d 0 0 0 0 0 0 0 0 1
# 2: ar_2d 1 0 0 0 1 1 0 2 1
# 3: lm_h_step 1 2 2 2 1 1 2 0 0
के लिये data.table
वी <1.9.5 आपको लोड करने की भी आवश्यकता होगी reshape2
और स्पष्ट रूप से उपयोग करें dcast.data.table
(इसलिये reshape2::dcast
सामान्य नहीं है और एक नहीं है dcast.data.table
तरीका)।
reshape2::melt
दूसरी तरफ, सामान्य है (देखें methods(melt)
) और एक है melt.data.table
विधि इसलिए आपको इसे कुछ भी बताने की आवश्यकता नहीं है। यह पता चलेगा कि आप किस विधि का उपयोग करना चाहते हैं class
का dat
require(reshape2)
dcast.data.table(melt(dat, "station"), value ~ station, length)
# value 1757 2171 2812 4501 4642 5029 5480 5779 5792
# 1: ar_1d 0 0 0 0 0 0 0 0 1
# 2: ar_2d 1 0 0 0 1 1 0 2 1
# 3: lm_h_step 1 2 2 2 1 1 2 0 0
यदि आप कड़ाई से उपयोग करने के साथ picky नहीं हैं data.table
विधियों, आप भी उपयोग कर सकते हैं reshape2::recast
(@shadows टिप्पणी देखें) जो उपर्युक्त समाधान के लिए एक रैपर है लेकिन इसका उपयोग कर रहा है reshape2::dcast
के बजाय dcast.data.table
और इस प्रकार एक वापस आ जाएगा data.frame
एक के बजाय वस्तु data.table
recast(dat, value ~ station, id.var = "station", length)
# value 1757 2171 2812 4501 4642 5029 5480 5779 5792
# 1 ar_1d 0 0 0 0 0 0 0 0 1
# 2 ar_2d 1 0 0 0 1 1 0 2 1
# 3 lm_h_step 1 2 2 2 1 1 2 0 0