मैं जानना चाहता हूं कि क्या कोई फ़ंक्शन या कोड है जो डेटाफ़्रेम डेटा को कॉलम में बदलता है।
यह मेरा मेकिंग डेटा फ्रेम है।
number <- c("no.1","no.2","no.3","no.4","no.5","no.6","no.7","no.8","no.9","no.10")
tp1 <- c("car","car","bicycle","car","walk","walk","bus","subway","subway","subway")
tp2 <- c("bicycle",NA,"bus",NA,"subway",NA,"walk",NA,NA,NA)
tp3 <- c("walk",NA,"subway",NA,NA,"bus",NA,NA,NA,NA)
tp4 <- c("bus","walk",NA,NA,NA,NA,NA,NA,NA,NA)
tp5 <- c("subway",NA,NA,NA,NA,NA,NA,NA,NA,NA)
transport <- data.frame(number,tp1,tp2,tp3,tp4,tp5)
और मैं स्क्रीनशॉट में दिखाए गए अनुसार नया डेटाफ्रेम बनाना चाहता हूं।
कृपया मुझे कुछ सुझाव दें :)
0
plusICON
19 जून 2020, 15:34
2 जवाब
आप डेटा को लंबे प्रारूप में प्राप्त कर सकते हैं, एक डमी कॉलम बना सकते हैं और इसे विस्तृत प्रारूप में वापस प्राप्त कर सकते हैं।
library(dplyr)
library(tidyr)
transport %>%
pivot_longer(cols = -number, values_drop_na = TRUE) %>%
mutate(n = 'yes') %>%
select(-name) %>%
pivot_wider(names_from = value, values_from = n, names_prefix = 'use_')
# number use_car use_bicycle use_walk use_bus use_subway
# <chr> <chr> <chr> <chr> <chr> <chr>
# 1 no.1 yes yes yes yes yes
# 2 no.2 yes NA yes NA NA
# 3 no.3 NA yes NA yes yes
# 4 no.4 yes NA NA NA NA
# 5 no.5 NA NA yes NA yes
# 6 no.6 NA NA yes yes NA
# 7 no.7 NA NA yes yes NA
# 8 no.8 NA NA NA NA yes
# 9 no.9 NA NA NA NA yes
#10 no.10 NA NA NA NA yes
0
Ronak Shah
19 जून 2020, 15:39
सलाह के लिए धन्यवाद :) यह उदाहरण डेटा था ... मैं वास्तविक डेटा में आवेदन करना चाहता हूं लेकिन त्रुटि है: मान विशिष्ट रूप से पहचाने नहीं जाते हैं; आउटपुट में सूची-कॉल्स होंगे। * इस चेतावनी को दबाने के लिए
– values_fn = list
का प्रयोग करें। * यह पहचानने के लिए values_fn = length
का उपयोग करें कि डुप्लिकेट कहां से आए हैं * डुप्लिकेट को सारांशित करने के लिए values_fn = {summary_fun}
का उपयोग करें मैं इसे कैसे हल कर सकता हूं???
plusICON
19 जून 2020, 16:25
आपको उदाहरण डेटा प्रदान करना चाहिए जो वास्तविक डेटा के समान हो ताकि हम आपके जैसे डेटा पर काम कर सकें। यहां कुछ चीजें दी गई हैं जो आप कर सकते हैं: 1) डेटा में केवल आवश्यक कॉलम रखें और उन कॉलम को हटा दें जिनकी आवश्यकता नहीं है
– select
(उत्तर में select(-name)
के समान)। यदि त्रुटि अभी भी बनी रहती है, तो group_by(name) %>% mutate(row = row_number())
करके एक अद्वितीय कॉलम बनाने का प्रयास करें। यहाँ एक संदर्भ पोस्ट है stackoverflow.com/questions/58837773/…
Ronak Shah
19 जून 2020, 16:37
error :Values are not uniquely identified
data.table में कोई समस्या नहीं है। लेकिन, मुझे लगता है कि इसे tidyr 1.1.0से हल कर लिया गया है ए>।
यहाँ वैसे भी, data.table समाधान है:
library(data.table)
transport <- as.data.table(transport)
transport_long <- melt(transport,
id = "number",
measure = patterns("tp"),
var.name ="tp",
value.name = "transport_mode",
na.rm = TRUE)
transport_long <- [, c("transport_mode", "yes") := .(paste0("use", transport_mode), "yes")]
dcast(transport_long[, -2], number~transport_mode, drop = FALSE, value.var = "yes")
number usebicycle usebus usecar usesubway usewalk
1: no.1 yes yes yes yes yes
2: no.10 <NA> <NA> <NA> yes <NA>
3: no.2 <NA> <NA> yes <NA> yes
4: no.3 yes yes <NA> yes <NA>
5: no.4 <NA> <NA> yes <NA> <NA>
6: no.5 <NA> <NA> <NA> yes yes
7: no.6 <NA> yes <NA> <NA> yes
8: no.7 <NA> yes <NA> <NA> yes
[ reached getOption("max.print") -- omitted 2 rows ]
0
Eyayaw
21 जून 2020, 20:09
with(cbind(transport[1], stack(lapply(transport[-1], as.character))), table(number, values))
.