-1

我有一个原子向量,想要过滤掉所有得分高于 20% 的行。数据如下所示:

                 Gain
ch1_500001  0.0000000
ch1_1500001 0.0000000
ch1_2500001 0.3157895
ch1_3500001 0.1578947
ch1_4500001 0.1578947
ch1_5500001 0.1578947

所以我希望选择 ch1_2500001。

我尝试了几种选择:

freqsnormg<- freqsnorm==0.20 只给出 FALSE

freqsnormg<- freqsnorm[,1]==0.20只给出 FALSE

如何获得仅包含 20% 以上值的新表。并且不要更改逻辑中的值。

4

4 回答 4

1

查看高于 20% 的值

freqsnormg<- freqsnorm[freqsnorm[,1]>0.20, ]

查看低于 20% 的值

freqsnormg<- freqsnorm[freqsnorm[,1]<0.20, ]
于 2012-11-07T14:36:03.923 回答
1

你的问题真的没有意义,你提到词向量,然后显示一个数据框。

  1. 如果你想过滤掉一个叫做then的向量的值:freqsnorm

    freqsnorm[freqsnorm < 0.20]
    
  2. 您的数据看起来像一个数据框,因此您需要一个逗号来选择行:

    ##Here freqsnorm[,1] selects the first column
    freqsnorm[freqsnorm[,1] < 0.20]
    ##Refer to the column by name
    freqsnorm[freqsnorm$Gain < 0.20]
    

在这两种情况下,方括号中的部分都会给你一个逻辑向量,即:

freqsnorm$Gain < 0.20 

将返回 TRUE、TRUE、FALSE 等。然后我们使用方括号选择我们想要的元素。

于 2012-11-07T14:37:26.150 回答
1

如果您正在处理data.frame尝试:

freqsnormg <- read.table(text='                 Gain
ch1_500001  0.0000000
ch1_1500001 0.0000000
ch1_2500001 0.3157895
ch1_3500001 0.1578947
ch1_4500001 0.1578947
ch1_5500001 0.1578947', header=T)

subset(freqsnormg, Gain>.2)  # above 20%
                 Gain
ch1_2500001 0.3157895

subset(freqsnormg, Gain<.2)  # below 20%
                 Gain
ch1_500001  0.0000000
ch1_1500001 0.0000000
ch1_3500001 0.1578947
ch1_4500001 0.1578947
ch1_5500001 0.1578947
于 2012-11-07T14:39:10.300 回答
1

您显示的数据不是原子向量(组件Gain很可能原子向量,但完整对象不是)。

一种选择是使用subset(). 使用您的数据

df <- read.table(text = "                 Gain
ch1_500001  0.0000000
ch1_1500001 0.0000000
ch1_2500001 0.3157895
ch1_3500001 0.1578947
ch1_4500001 0.1578947
ch1_5500001 0.1578947", header = TRUE)

我们有

> subset(df, Gain > 0.2)
                 Gain
ch1_2500001 0.3157895

如果你想强制它下降到一个向量(即松开空维度)然后

> subset(df, Gain > 0.2)[,1]
[1] 0.3157895
于 2012-11-07T14:42:36.613 回答