【发布时间】:2015-01-18 23:19:53
【问题描述】:
我有一个由两列组成的数据框。假设它已经按第一列分组。对于每个组,只有当第 2 列中的值为 100 时,我才需要从该数据框中选择行。是否有最佳方法来执行此操作?
目前,我已经编写了一个迭代解决方案,如下所示,它基本上将每个组读入一个临时数据帧,并在 column2 中的值为 100 时将行选择到一个名为 finaldf 的最终数据帧中。
编辑:请注意 col2 中的数据不是按升序排列的,因此我不能使用诸如 mydf$col2 > 100 之类的条件。100 只是一个占位符,它表示从何时开始我应该开始选择行。
myfun = function()
{
col1 = c(1,1,1,2,2,3,3,3,3,3)
col2 = c(80,100,75,90,100,75,100,12,14,150)
mydf = data.frame(col1,col2)
finaldf = NULL;
uniquecol1values = unique(col1)
for(i in 1:length(uniquecol1values))
{
tempdf = mydf[which(mydf$col1 == uniquecol1values[i]),]
print(tempdf)
startincluding = 0;
for(j in 1:nrow(tempdf))
{
if(tempdf[j,2] == 100)
{
startincluding = 1;
}
if(startincluding == 1)
{
finaldf = rbind(finaldf,tempdf[j,])
}
}
}
print(finaldf)
}
> mydf
col1 col2
1 1 80
2 1 100
3 1 75
4 2 90
5 2 100
6 3 75
7 3 100
8 3 12
9 3 14
10 3 150
> finaldf
col1 col2
2 1 100
3 1 75
5 2 100
7 3 100
8 3 12
9 3 14
10 3 150
编辑:如果我应用诸如 mydf[mydf$col2>=100,] 之类的条件,它只会给我 col2 值大于等于 100 的行。这不是正确的输出,因为我们想要像这样的行(1, 75) 被包含在 75
> mydf[mydf$col2>=100,]
col1 col2
2 1 100
5 2 100
7 3 100
10 3 150
【问题讨论】: