将间隔转换为数字

Converting interval to numeric

我的数据框的结构是这样的:

    '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' 

我做错了什么?我的错误以 'double' 形式出现,但我不明白这是怎么回事。 谢谢!

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

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 通常在必要时非常擅长将整数转换为数字。