繁体   English   中英

如果循环返回索引值而不是矢量字符值

[英]If Loop returning Index Values instead of Vector Character Values

从下面的数据集中:

         Referee      Tca
1       A D'Urso 2.733333
2       A Davies 3.529412
3       A Haines 2.722222
4       A Madley 3.407407
5     A Marriner 3.640000
6       A Taylor 3.603448
7      A Woolmer 3.222222
8       B Malone 1.636364
9        C Berry 3.800000
10     C Boyeson 3.800000

我正在尝试创建一个简单的循环,为我提供Tca> 4的裁判姓名。

循环代码为:

test <- NULL
for (i in c(1:length(gio$Referee))) {
if(gio$Tca[i] > 4){
    test[i] <- gio$Referee[i]
 }
}

但是,这不是返回名称列表而是索引列表:

如何获得裁判列表而不是索引?

你可以试试

as.character(with(gio,Referee[Tca>3]))
[1] "A Davies"   "A Madley"   "A Marriner" "A Taylor"   "A Woolmer"  "C Berry"    "C Boyeson" 

(我在这里选择Tca > 3 ,因为您的标准Tca > 4会在给定样本数据的情况下产生空向量)。

数据

gio <- read.table(text="Referee Tca
                   'A D\\'Urso' 2.733333
                     'A Davies' 3.529412
                     'A Haines' 2.722222
                     'A Madley' 3.407407
                   'A Marriner' 3.640000
                     'A Taylor' 3.603448
                    'A Woolmer' 3.222222
                     'B Malone' 1.636364
                      'C Berry' 3.800000
                   'C Boyeson'  3.800000", header=TRUE)

调用数据框df,您可以简单地使用dplyr,对df进行过滤,如下所示:

  library(dplyr)
  filtered_df = filter(df, Tca > 4)

因为引用因子变量会给出因子级别,而不是因子值

之所以获取索引而不是名称,是因为gio$Referee是作为一个因素存储的,当您使用factor[any index]引用一个因素时,您得到的是索引而不是因素值。

要获取因子值,请附加as.character

test <- NULL
for (i in c(1:length(gio$Referee))) {
    if(gio$Tca[i] > 3){
        test[i] <- as.character(gio$Referee[i])
    }
}

注意:我已将条件修改为大于3。

这将输出为

test
 [1] NA           "A Davies"   NA           "A Madley"   "A Marriner" "A Taylor"  
 [7] "A Woolmer"  NA           "C Berry"    "C Boyeson" 

现在,这些NA是因为您使用NULL进行了初始化,并且仅在满足您条件的索引上放置了值。 一个更好的for循环将是

test <- character()
for (i in c(1:length(gio$Referee))) {
    if(gio$Tca[i] > 3){
        test<-append(test,as.character(gio$Referee[i]))
    }
}

在这里,我使用空字符数组初始化了测试,并从gio$Referee追加了满足我条件的那些值。 这给出了输出

test
[1] "A Davies"   "A Madley"   "A Marriner" "A Taylor"   "A Woolmer"  "C Berry"   
[7] "C Boyeson"

所有人都说过

您不需要循环即可执行此操作

将您的数据框子集为

gio$Referee[gio$Tca>3]

这意味着请给我来自gio Referee ,其中gio$Tca大于3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM