我有一个原始数据集,如下所示:
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中可以用什么语法实现这个?
答案 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);