如何在没有每列特定变量的原始数据集中过滤数据

时间:2017-02-08 00:15:55

标签: r data-cleaning

我有一个原始数据集,如下所示:

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并尝试使用以下代码将其构建为dataframe

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

我想要的输出是选出'k'作为第一个字母的元素:

k1468   k1467   k1162   k1149   k1619   k1666   k1669   k1767   k1719   k1772   k1776   k1782
我是 没有与每列对应的特定变量。对于这个原始数据,我发现的唯一功能是它们对不同的块有不同的首字母。我想提取第一个字母为'k'的数据,即从k1467到k1782。我想知道在R中可以用什么语法实现这个?

1 个答案:

答案 0 :(得分: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);

您所需的输出将存储在d。

编辑: 对于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);