2017-07-22 18 views
0

我正在尝试基于已经存在的数据帧创建子数据帧。我的子数据框正在填充行数而不是行本身。使用grep获取数据帧的行,而不是行号

rates = read.csv("file.txt") 
genes = unique(gsub('_[0-9]+', '', rates[,1])) 
for (k in unique(gsub('_[0-9]+', '', rates[,1]))){ 
     sub = print(grep(k, rates[,1]), value=T) 
     sub 
} 

file.txt的

clothing,freq,temp 
coat_1,0.3,10 
coat_1,0.9,0 
coat_1,0.1,20 
coat_2,0.5,20 
coat_2,0.3,15 
coat_2,0.1,5 
scarf,0.4,30 
scarf,0.2,20 
scarf,0.1,10 

这是目前输出

[1] 1 2 3 4 5 6 
[1] 7 8 9 

,我想这样的事情,而不是

clothing freq temp 
1 coat_1 0.3 10 
2 coat_1 0.9 0 
3 coat_1 0.1 20 
4 coat_2 0.5 20 
5 coat_2 0.3 15 
6 coat_2 0.1 5 

    clothing freq temp 
1 scarf 0.4 30 
2 scarf 0.2 20 
3 scarf 0.1 10 
+1

你可以做'拆分(费率,费率$衣服==“围巾”)' –

+1

试试这个,而不是在循环中:'sub = print(rates [grep(k,rates [,1]),])' – Dave2e

+0

谢谢@ Dave2e,它做到了 – Jacob

回答

1
rates <- read.csv("file.txt", stringsAsFactors = FALSE) 
rates 
# clothing freq temp 
# 1 coat_1 0.3 10 
# 2 coat_1 0.9 0 
# 3 coat_1 0.1 20 
# 4 coat_2 0.5 20 
# 5 coat_2 0.3 15 
# 6 coat_2 0.1 5 
# 7 scarf 0.4 30 
# 8 scarf 0.2 20 
# 9 scarf 0.1 10 

rates[rates$clothing != "scarf",] 
# clothing freq temp 
# 1 coat_1 0.3 10 
# 2 coat_1 0.9 0 
# 3 coat_1 0.1 20 
# 4 coat_2 0.5 20 
# 5 coat_2 0.3 15 
# 6 coat_2 0.1 5 
rates[rates$clothing == "scarf",] 
# clothing freq temp 
#7 scarf 0.4 30 
#8 scarf 0.2 20 
#9 scarf 0.1 10