2017-02-08 27 views
1

У меня есть необработанный набор данных выглядит следующим образом:Как фильтровать данные в необработанном наборе данных без конкретных переменных для каждого столбца

a619 a6641 a6672 a6741 a686 a6876 a689 a6946 a691 
a6976 a40  a4019 b409 b4147 b4111 b416 b4167 b4178 
b4186 b4198 b421 b4261 b4211 b4266 b4614 t4641 t4667 
t4677 t4681 t4466 t4161 t4149 t4170 t4602 t4664 t461  
t4691t t4764 t4767 f4792 f4948 f4988 f1086 f1168 f1184  
f1189 f1207 f1222 f1691 f1429 k1468 k1467 k1162 k1149 
k1619 k1666 k1669 k1767 k1719 k1772 k1776 k1782 p1827 
p1872 p1914 p1921 p1914 p1992 p6  p6094 p6106 p6164 
p6114 p6261 w6627 w6671 w6416 w6466 w6469 w6171 w6194 
w6666 w6884 w6911 w7  w70  w7016 g7011 g7076 g7091 
g7164 g7191 g7266 g7621 g7406 g7426 g7426 g7467 g7106 

Поместите исходные данные в data.txt и попробовать коды followwing построить их в dataframe:

library(data.table) 
data <- fread("C:\\Desktop\\data.txt", header = F) 

Мой требуемый выход, чтобы выбрать элементы с «к» в качестве первой буквы:

k1468 k1467 k1162 k1149 k1619 k1666 k1669 k1767 k1719 k1772 k1776 k1782 

Я Нет конкретных переменных, соответствующих каждому столбцу. Для этих необработанных данных единственная функция, которую я обнаружил, заключается в том, что у них разная первая буква для разных кусков. Я хочу извлечь данные о том, что первая буква «k», то есть от k1467 до k1782. Мне интересно, какой синтаксис может достичь этого в R?

+0

Что вы пробовали? SO не является кодовым письмом. И каков ваш желаемый результат? – Parfait

+0

Играйте с grep, и если вам нужна дополнительная помощь, предоставите воспроизводимую версию вашего фрейма данных (то есть код для создания подмножества кадра данных), чтобы люди могли видеть, как код будет действовать на ваши данные. – MPhD

ответ

1

Поскольку вы хотите вектор требуемых значений, попытайтесь преобразовать вашу матрицу в вектор, а затем сделать sapply, как показано ниже:

d<-c(); 
sapply(as.vector(your_data_matrix), function(x) { if (substr(x, 1, 1) == 'k') { d <<- c(d, x); }}, USE.NAMES = FALSE); 

Вашей требуемая мощность будет храниться в д.

EDIT: Для data.table вам придется unlist, а затем сделать sapply следующим образом:

d<-c(); 
sapply(as.vector(unlist(your_data_table)), function(x) { if (substr(x, 1, 1) == 'k') { d <<- c(d, x); }}, USE.NAMES = FALSE); 
+0

Исходя из вашего предложения, коды будут 'library (data.table) data1 <- fread (" C: \\ Users \\ Desktop \\ data.txt ", header = F); d <-c(); sapply (as.vector (data1), function (x) { if (substr (x, 1, 1) == 'k') {d <- c (d, x);}}, ИСПОЛЬЗОВАНИЕ. NAMES = FALSE); 'но возвращает строки' Null': '$ V1 NULL' –

+0

Мой ответ был за матрицу данных. Для таблицы данных вам нужно будет сначала перечислить, а затем выполнить операцию. 'As.vector (unlist (data1))' –

 Смежные вопросы

  • Нет связанных вопросов^_^