2015-01-19 9 views
6

मैं थोड़ी देर के लिए इसे समझने की कोशिश कर रहा हूं, और सोचा कि मैं यहां पूछूंगा।स्प्लिट ऊंटकेस कॉलम नाम

df <- data.frame(participant = 1:6, group = c("adult", "adult", "child", "child", "NSS", "NSS"), RegProto = c(2, 3, 4, 2, 4, 3), RegInt = c(2, 3, 4, 6, 6, 5), RegDistant = c(3, 3, 4, 5, 4, 5), IrregProto = c(4, 5, 3, 4, 3, 1), IrregInt = c(4, 4, 4, 4, 4, 4), IrregDistant = c(4, 5, 6, 8, 9, 1)) 

इस डेटा फ्रेम के साथ समस्या यह है कि प्रत्येक दो चर होता है:

मैं निम्नलिखित की तरह एक डेटा फ्रेम कहो एक चर जिसका मान हैं या तो Reg या Irreg, एक और जिनके मान Proto कर रहे हैं, Int, या Distant। मैं जो करना चाहता हूं वह इन कॉलम को विभाजित करता है और टेबल को लंबा बनाता है, अधिमानतः tidyr का उपयोग करना। मैंने सोचा कि मैं ऐसा कर सकता हूं।

library("tidyr") 
df_long <- df %>% 
gather(index, n, -group, -participant) %>% 
select(participant, group, index, n) %>% 
separate(index, into = c("verb", "similarity"), sep = "\\.?=\\p{Upper}") 

यह मैं separate() तक चाहता हूं। मुझे एक त्रुटि संदेश मिलता है जिसमें कहा गया है कि मान विभाजित नहीं थे, लेकिन ऐसा कोई अन्य सुझाव क्यों नहीं हो सकता है। मैं regex के लिए नया हूँ, इसलिए मुझे संदेह है कि समस्या वहां होनी चाहिए, लेकिन मैं यह नहीं समझ सकता कि सही वाक्यविन्यास क्या हो सकता है।

उत्तर

9

आप इस regex का उपयोग कर सकते हैं:

(?<=.)(?=[A-Z]) 

यह (शून्य लंबाई) की स्थिति एक अपरकेस अक्षर द्वारा पीछा किया और किसी भी चरित्र से पहले इंगित करता है।

आदेश:

library(dplyr) 
df %>% 
    gather(index, n, -group, -participant) %>% 
    select(participant, group, index, n) %>% 
    separate(index, into = c("verb", "similarity"), sep = "(?<=.)(?=[A-Z])") 
+0

धन्यवाद एक लाख। – JoeF

संबंधित मुद्दे