我已将一堆我的列从因子转换为数字,但代码非常繁琐.我不得不单独转换每一列,最终花费的时间比它应该多.这是我使用的代码(只是一个简短的示例 - 我实际上有更多列):
city1$NY <-as.numeric(levels(city1$NY))[city1$NY]
city1$CHI<-as.numeric(levels(city1$CHI))[city1$CHI]
city1$LA <-as.numeric(levels(city1$LA))[city1$LA]
city1$ATL<-as.numeric(levels(city1$ATL))[city1$ATL]
city1$MIA<-as.numeric(levels(city1$MIA))[city1$MIA]
Run Code Online (Sandbox Code Playgroud)
我几乎是肯定的,而不是做所有这些,我可以做到:
city1[,CityNames]<-as.numeric(levels(city1[,CityNames]))[city1[,CityNames]]
Run Code Online (Sandbox Code Playgroud)
其中CityNames只是我要转换的数据的所有列.但是这不起作用,因为我得到:
Error in as.numeric(levels(city1[, CityNames]))[city1[, CityNames]] :
invalid subscript type 'list'
Run Code Online (Sandbox Code Playgroud)
谁能说出我做错了什么?或者除了我漫长而讨厌的第一种方法之外,还有简单的方法来完成这项任务吗?
我几乎是肯定的,而不是做所有这些,我可以做到:
Run Code Online (Sandbox Code Playgroud)city1[,CityNames]<-as.numeric(levels(city1[,CityNames]))[city1[,CityNames]]
因此,需要进行一些小改动:
city1[,CityNames] <- lapply(city1[,CityNames], function(x) as.numeric(levels(x))[x] )
Run Code Online (Sandbox Code Playgroud)
最初的方法不起作用,因为
levels是特定于矢量的,所以不清楚是什么myvec = levels(city1[,CityNames]).myvec[ city1[,CityNames] ]抛出错误,因为city1[,CityNames]是data.frame并且不能以这种方式用于子集.