代码之家  ›  专栏  ›  技术社区  ›  KatherineD

将间隔转换为数字

  •  -1
  • KatherineD  · 技术社区  · 8 年前

    我的数据帧结构如下:

        'data.frame':   74 obs. of  7 variables:
    $ Scientific_Name                           : Factor w/ 74 levels "Aesculus glabra",..: 1 2 3 4 5 6 7 8 9 10 ...
    $ Endangered.or.threatened                  : int  0 0 1 0 1 1 0 1 1 0     ...
    $ Lat_spread                                : num  12.95 1.22 13.18 11.23  15.74 ...
    $ Restricted_range                          : int  0 0 0 1 0 1 0 1 0 0 ...
    $ Available                                 : int  1 1 0 1 1 0 0 0 0 1 ...
    $ Abiotic_adapted_not_including_availability: int  4 NA 3 3 4 3 4 4 4 4 ...
    $ Dispersal_score                           : int  5 NA 2 2 9 2 4 1 5 4  ...
    

    我正在尝试将整数列转换为数字向量。这是我的代码:

    > RestrictedY <- subset(Status_restricted_Wilcox, Endangered.or.threatened == 1, select = Restricted_range)
    > RestrictedY <- as.vector(RestrictedY)
    > RestrictedY <- as.numeric(RestrictedY)
    Error: (list) object cannot be coerced to type 'double'
    > Status_restricted_Wilcox <- read.csv("~/Documents/Honours_data_analysis/Status_restricted_Wilcox.csv", na.strings="NA_integer_")
    >   View(Status_restricted_Wilcox)
    > RestrictedY <- subset(Status_restricted_Wilcox, Endangered.or.threatened == 1, select = Restricted_range)
    > RestrictedY <- as.vector(RestrictedY)
    > RestrictedY <- as.numeric(RestrictedY)
    Error: (list) object cannot be coerced to type 'double' 
    

    我做错了什么?我的错误表现为“双重”,但我不明白是怎么回事。 非常感谢。

    1 回复  |  直到 8 年前
        1
  •  0
  •   MrFlick    8 年前

    当您使用 subset() ,您总是会得到一个数据。与使用其他形式的子集集不同,当您选择单个列时,子集集会返回向量。不能强制数据。帧转换为原子数值。尝试

    RestrictedY <- subset(Status_restricted_Wilcox, Endangered.or.threatened == 1, select = Restricted_range)[[1]]
    #or 
    RestrictedY <- subset(Status_restricted_Wilcox, Endangered.or.threatened == 1)$Restricted_range)
    # or
    RestrictedY <- with(Status_restricted_Wilcox, Restricted_range[Endangered.or.threatened == 1])
    

    您不需要任何进一步的强制,因为R通常非常擅长在必要时将整数转换为数字。