引言
在R学习中经常用到的是按着某种逻辑值提取数据集。本文来讲一下利用索引的手法删除数据集合。
数据准备
> Data 英雄 职业 熟练等级 使用频次 胜率 1 后裔 射手 5 856 0.64 2 孙尚香 射手 5 211 0.10 3 狄仁杰 射手 5 324 0.20 4 李元芳 射手 4 75 0.30 5 安琪拉 法师 5 2324 0.40 6 张良 法师 4 755 0.50 7 不知火舞 法师 4 644 0.60 8 貂蝉 法师 3 982 0.70 9 <NA> <NA> NA NA NA
方案一:互斥法
> # 提取法师职业 > subset(Data, 职业 != "法师") 英雄 职业 熟练等级 使用频次 胜率 1 后裔 射手 5 856 0.64 2 孙尚香 射手 5 211 0.10 3 狄仁杰 射手 5 324 0.20 4 李元芳 射手 4 75 0.30 > # 提取非法师职业 > subset(Data, 职业 != "法师") 英雄 职业 熟练等级 使用频次 胜率 1 后裔 射手 5 856 0.64 2 孙尚香 射手 5 211 0.10 3 狄仁杰 射手 5 324 0.20 4 李元芳 射手 4 75 0.30 > # 提取胜率大于等于50% > subset(Data, 胜率 >= 0.5) 英雄 职业 熟练等级 使用频次 胜率 1 后裔 射手 5 856 0.64 6 张良 法师 4 755 0.50 7 不知火舞 法师 4 644 0.60 8 貂蝉 法师 3 982 0.70 > # 提取胜率小于50% > subset(Data, 胜率 < 0.5) 英雄 职业 熟练等级 使用频次 胜率 2 孙尚香 射手 5 211 0.1 3 狄仁杰 射手 5 324 0.2 4 李元芳 射手 4 75 0.3 5 安琪拉 法师 5 2324 0.4
方案一可以解决一部分的这类问题,但是这种方案需要你的全集不会有缺失值非数这样的其他不在全集里的事件。所以有下面第二种补充方法。
方案二:位置法
> n = which(Data$胜率 >= 0.5) > Data[-n,] 英雄 职业 熟练等级 使用频次 胜率 2 孙尚香 射手 5 211 0.1 3 狄仁杰 射手 5 324 0.2 4 李元芳 射手 4 75 0.3 5 安琪拉 法师 5 2324 0.4 9 <NA> <NA> NA NA NA
可以看到这种删除只删除了胜率大于等于50%,保留了缺失值。
总结
数据的增删改查是一般计算机语言基本的操作手段,应该有直接的函数进行操作。