R语言中,遇到什么事情,请别犹豫,立刻输入?somethingunknow(当然somethingunknow的意思是some thing unknow,例如你不懂函数ctree,你要输入?ctree,我是不是很无聊),你马上会有解答的。
所以这篇东西只是用来打发下无聊漫长的夜晚,还有找不到工作的寂静无聊。
可能最好先看第5点再重头看看呗。

一、我为什么无聊到这个程度?

首先我在写脚本的时候,想把数据帧的第一列变为行标题rownames),但这时候却报错了:

> data.input.f<-data.frame(data.input[2:ncol(data.input)],row.names=data.input[1])
Error in if (length(row.names) != 1L || row.names < 1L || row.names >  : 需要TRUE/FALSE值的地方不可以用缺少值
此外: Warning messages:
1: In Ops.factor(left, right) : ‘<’ not meaningful for factors
2: In Ops.factor(left, right) : ‘>’ not meaningful for factors

说真的,其实我不是很懂这到底是什么意思,但我单独抽出
head(data.input[2:ncol(data.input)])
以及
head(data.input[1])
都是我想哟的结果,于是我用了神器?,发现里面对于row.names的描述为:

row.names
NULL or a single integer or character string specifying a column to be used as row names, or a character or integer vector giving the row names for the data frame.

关键点我已经表粗了,我终于懂了!你是要一个向量(vector)作为输入的,那…我先用class函数看看先:

> class(data.input[1])
[1] "data.frame"

诶呀我X,你为什么是一个数据帧了呢!?不科学啊!
这时候我想起了之前有个例子曾经用[[1]]作为提取其中一列的数据,我尝试下先:

> class(data.input[[1]])
[1] "factor"

哎呀妈呀…为什么不是向量的!?不管了,先试下先:

> data.input.f<-data.frame(data.input[2:ncol(data.input)],row.names=data.input[[1]])
> head(data.input.f)ComparedLastYearVoiceGrowth ComparedPHolidayVoiceGrowth ComparedLastYearTrafficGrowth ComparedPHolidayTrafficGrowth
从化花市                         -0.0216                      5.0685                         0.534                         1.771
番禺花市                         -0.3020                     -0.0401                         0.283                         0.931
越秀西湖花市                     -0.2872                      0.1258                         0.884                         0.719
增城花市                         -0.0487                      0.2641                         0.655                         0.665
海珠花市                         -0.4660                     -0.0106                         0.724                         0.406
黄埔花市                         -0.4547                      0.5840                         0.544                         0.275

哎呀,成了!?

二、为什么!?因子跟向量是什么鸟关系

这个关系呢,其实说来话长,我就不说了,说点实际的。当我们需要一个向量的时候,我们手里握的是因子,那怎么办!?转换啊!先来尝尝最简单的转换:

> head(data.input[[1]])
[1] 从化花市     番禺花市     越秀西湖花市 增城花市     海珠花市     黄埔花市
193 Levels: 105国道 106国道 5号停机坪 APM线 G324国道 白鹅潭 白水寨 白云公园 白云国际会议中心 白云国际机场 白云花市 白云山 白云万达广场 百万葵园 北京路步行街 城隍庙 赤沙服务区 从化花市 从化汽车站 ... 珠三角环线高速
> head(c(data.input[[1]]))
[1]  18  42 179 181  81 100
> class(c(data.input[[1]]))
[1] "integer"

显然不能直接用c()来转换因子,那还有什么办法呢?这时候,你可以Google,也可以?c。帮助文档给出了一个答案:

c is sometimes used for its side effect of removing attributes except names, for example to turn an array into a vector. as.vector is a more intuitive way to do this, but also drops names. Note that methods other than the default are not required to do this (and they will almost certainly preserve a class attribute).

显然我们可以尝试一下as.vector(虽然看描述好像比c()更不靠谱)。
结果:

> head(as.vector(data.input[[1]]))
[1] "从化花市"     "番禺花市"     "越秀西湖花市" "增城花市"     "海珠花市"     "黄埔花市"
> class(as.vector(data.input[[1]]))
[1] "character"

还不错哦!!
所以…诶,我刚说到哪里?哦,就是刚那条把数据帧第一列变成行标题的语句最好改为:
data.frame(data.input[2:ncol(data.input)],row.names=as.vector(data.input[[1]]))

三、那关中括号什么事呢?

R语言里面,中括号是…不是很想说,不如大家来看看R统计笔记(四):中括号与双中括号的差异吧。
看完其实都了解得差不多,如果实在不是很理解就自己去看看?"[["呗。
下面弄各实例呗,当你对一个数据帧去使用中括号的时候:


> head(data.input)HotSpot ComparedLastYearVoiceGrowth ComparedPHolidayVoiceGrowth ComparedLastYearTrafficGrowth ComparedPHolidayTrafficGrowth
1     从化花市                     -0.0216                      5.0685                         0.534                         1.771
2     番禺花市                     -0.3020                     -0.0401                         0.283                         0.931
3 越秀西湖花市                     -0.2872                      0.1258                         0.884                         0.719
4     增城花市                     -0.0487                      0.2641                         0.655                         0.665
5     海珠花市                     -0.4660                     -0.0106                         0.724                         0.406
6     黄埔花市                     -0.4547                      0.5840                         0.544                         0.275
> class(data.input)
[1] "data.frame"
> head(data.input[2])ComparedLastYearVoiceGrowth
1                     -0.0216
2                     -0.3020
3                     -0.2872
4                     -0.0487
5                     -0.4660
6                     -0.4547
> class(data.input[2])
[1] "data.frame"
> head(data.input[[2]])
[1] -0.0216 -0.3020 -0.2872 -0.0487 -0.4660 -0.4547
> class(data.input[[2]])
[1] "numeric"

但如果你对一个列表去使用中括号的话呢:

> head(mylist)
$title
[1] "My First List"$ages
[1] 25 26 18 39[[3]][,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10[[4]]
[1] "one"   "two"   "three"> class(mylist)
[1] "list"
> mylist[3]
[[1]][,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10> class(mylist[3])
[1] "list"
> mylist[[3]][,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10
> class(mylist[[3]])
[1] "matrix"

也就是说,当你使用单中括号的时候,你仍然会获得原对象数据类型(但内容只有你选中的字段),而当你用双中括号的时候才会获得他自身的数据类型

四、其实我只是无聊

明天可以说下formula呗,真的挺无聊的我。

五、关于所用函数

本次所说的内容里面主要包含两个函数,一个函数是class,另外一个是head,其实对于linux用户来说,head我觉得不用说了(那就真的不说了哦!)。而class呢?就是查询该对象的的类型,就像:

> class(1024)
[1] "numeric"
> class('Love You Baby')
[1] "character"

完事。

拾叁-关于R语言中括号的一些事,以及因子、向量转换的一些情相关推荐

  1. R语言rev函数对数据对象(向量、dataframe通过行或者列)反序实战

    R语言rev函数对数据对象(向量.dataframe通过行或者列)反序实战 目录 R语言rev函数对数据对象(向量.dataframe通过行或者列)反序实战

  2. R语言pmax函数和pmin函数按位计算向量最大值、最小值实战

    R语言pmax函数和pmin函数按位计算向量最大值.最小值实战 目录 R语言pmax函数和pmin函数按位计算向量最大值.最小值实战 #基本语法<

  3. R语言可视化包ggplot2包通过因子变量设置图像颜色实战

    R语言可视化包ggplot2包通过因子变量设置图像颜色实战 目录 R语言可视化包ggplot2包通过因子变量设置图像颜色实战 <

  4. R语言pretty函数生成等间距的数值向量实战

    R语言pretty函数生成等间距的数值向量实战 目录 R语言pretty函数生成等间距的数值向量实战 #基本语法

  5. R语言使用多个数据类型不同的向量数据创建一个dataframe数据对象、使用[]操作符和列名称访问dataframe指定数据列的数据(dataframe column data)

    R语言使用多个数据类型不同的向量数据创建一个dataframe数据对象.使用[]操作符和列名称访问dataframe指定数据列的数据(dataframe column data) 目录 R语言使用多个 ...

  6. R语言使用多个数据类型不同的向量数据创建一个dataframe数据对象、使用$操作符和列名称访问dataframe指定数据列的数据

    R语言使用多个数据类型不同的向量数据创建一个dataframe数据对象.使用$操作符和列名称访问dataframe指定数据列的数据 目录 R语言使用多个数据类型不同的向量数据创建一个dataframe ...

  7. R语言使用多个数据类型不同的向量数据创建一个dataframe数据对象、使用[]操作符和列索引数值访问dataframe指定数据列的数据(column index)

    R语言使用多个数据类型不同的向量数据创建一个dataframe数据对象.使用[]操作符和列索引数值访问dataframe指定数据列的数据(column index) 目录 R语言使用多个数据类型不同的 ...

  8. R语言使用多个数据类型不同的向量数据创建一个dataframe数据对象、使用列名称(column name)访问dataframe中的指定数据列的数据

    R语言使用多个数据类型不同的向量数据创建一个dataframe数据对象.使用列名称(column name)访问dataframe中的指定数据列的数据 目录 R语言使用多个数据类型不同的向量数据创建一 ...

  9. R语言使用多个数据类型不同的向量数据创建一个dataframe数据对象、使用names函数查看dataframe数据的列名称

    R语言使用多个数据类型不同的向量数据创建一个dataframe数据对象.使用names函数查看dataframe数据的列名称 目录 R语言使用多个数据类型不同的向量数据创建一个dataframe数据对 ...

最新文章

  1. 开发脚本自动部署及监控
  2. 一个关于Integer的秘密
  3. 线程锁定CPU linux,linux 线程与CPU绑定
  4. JUnit5 @AfterEach注解示例
  5. Datawhale数据挖掘项目之task1
  6. 仙剑四--IT的同仁有,是仙剑迷的请浏览
  7. 小程序分销商城源码系统+搭建教程+前后端完整版
  8. 携手网易打造世界杯主题房 YUNIK HOTEL玩转兴趣社交新场景
  9. 怎么把台式电脑的大量数据快速迁移到笔记本
  10. Non-local:用于捕获长距离依赖关系
  11. 使用华为光猫ONT使能工具后,本地主机如何通过Telnet登录光猫进行配置
  12. PNG图像文件格式解析
  13. JDBC-03:PreparedStatement如何实现对数据库的增删改查操作
  14. python实训名片管理程序_python实现名片管理系统
  15. 第二届安洵杯2019部分writeup
  16. 诚之和:44页报告还原“美国散户复仇记”!揭秘黑池交易是如何割韭
  17. 相约上海,百家公司齐聚SDCC 2017·上海站,约吗?(附名单及参会提醒)
  18. Python中相似度对比-difflib模块
  19. 不同版本python的升级和安装
  20. MYSQL函数 group_concat巨坑!!!

热门文章

  1. Dell 14R N4120笔记本电脑加固态硬盘
  2. 计算机网络 实验三 网络互联与路由协议配置
  3. 基于ZigBee的WPAN网络配置应用
  4. P5238 整数校验器 (3月份洛谷月赛2019)
  5. Android Notification 详解(各版本对比)——基本操作
  6. 【Scrapy pipeline 存入数据到mysql 】mysql的实践笔记,以及模板代码
  7. 百度云服务器连接SQLServer2012
  8. 百度搜优化软件_SEO优化教程
  9. 如何辨别真假IPHONE4 , IPHONE 4S ?
  10. 卸载计算机安全证书,如何卸载ssl证书_卸载根证书的操作指南_什么是SSL卸载,SSL卸载优点有哪些? - 沃通SSL证书...