Jan*_*sch 3 logic r vector dataframe
我正在处理一个数据框('df_temp'),其中有两列客户ID('Custid')和收入('收入'):
Custid Income
<fctr> <dbl>
1 1003 29761.20
2 1004 98249.55
3 1006 23505.30
4 1007 72959.25
5 1009 114973.95
6 1010 25038.30
Run Code Online (Sandbox Code Playgroud)
在检查收入是否为数字时,我遇到以下问题:
使用$来引用收入,返回TRUE:
> is.numeric(df_temp$Income)
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
使用[,2]或[,(...())来引用收入,返回FALSE:
> i <- which(names(df_temp)=='Income')
> is.numeric(df_temp[,i])
[1] FALSE
> is.numeric(df_temp[,2])
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
当尝试使用[,]将此向量设置为数字时,我遇到了另一个问题:
> df_temp[,2] <- as.numeric(df_temp[,2])
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)Error: (list) object cannot be coerced to type 'double'
我一直认为$和[]在引用数据框中的向量时起到同样的作用.
有人可以帮助我理解问题并使用[,]表达式将此向量转换为数字吗?
Jos*_*ich 10
您没有使用data.frame.你正在使用"tbl_df".使用$返回向量来子集tbl_df .使用[返回tbl_df来设置tbl_df,并且tbl_df不是数字向量,因此is.numeric返回FALSE.
tbl_df做的一件事就是drop = FALSE在调用时使用[.但是通过积极阻止你设置它会更进一步drop = TRUE:
x <- tbl_df(mtcars)
is.numeric(x[,"cyl",drop=TRUE])
# [1] FALSE
Warning messages:
1: drop ignored
Run Code Online (Sandbox Code Playgroud)
因此,您不能[以您想要的方式使用tbl_df.您必须使用$或[[提取矢量.
is.numeric(x$cyl)
# [1] TRUE
is.numeric(x[["cyl"]])
# [1] TRUE
Run Code Online (Sandbox Code Playgroud)