سؤال

أود اختيار صفوف بناءً على مجموعات فرعية من أسمائهم ، على سبيل المثال

إذا كان لدي البيانات التالية:

data <- structure(c(91, 92, 108, 104, 87, 91, 91, 97, 81, 98), 
.Names = c("fee-", "fi", "fo-", "fum-", "foo-", "foo1234-", "123foo-", 
"fum-", "fum-", "fum-"))

كيف يمكنني اختيار الصفوف المطابقة "فو"؟

استخدام GREP () لا يعمل:

 grep('foo', data)

عائدات:

integer(0)

ما الخطأ الذي افعله؟ او هل هناك طريقه افضل؟

شكرًا!

هل كانت مفيدة؟

المحلول

تحتاج إلى grep خاصية أسماء البيانات ، وليس خاصية القيم.

لمثالك ، استخدم

> grep("foo",names(data))
[1] 5 6 7
> data[grep("foo",names(data))]
  foo- foo1234-  123foo- 
  87       91       91 

إحدى الطرق النظيفة الأخرى للقيام بذلك هي استخدام إطارات البيانات.

> data <- data.frame(values=c(91, 92, 108, 104, 87, 91, 91, 97, 81, 98), 
                   names = c("fee-", "fi", "fo-", "fum-", "foo-", "foo1234-", "123foo-", 
                   "fum-", "fum-", "fum-"))

> data$values[grep("foo",data$names)]
[1] 87 91 91

نصائح أخرى

استخدم المجموعة الفرعية مع التعبيرات العادية:

subset(your_data, regexpr("foo", your_data$your_column_to_match) > 0))

إذا كنت تهتم فقط بمجموعة بيانات مع عمود واحد ، فأعتقد أنك لا تحتاج إلى تحديد اسم العمود ...

فيليب

> grep("foo",names(data), value=T)
[1] "foo-"     "foo1234-" "123foo-" 

إذا كانت القيمة صحيحة ، فإنها تُرجع المحتوى بدلاً من الفهرس

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top