全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
15459 7
2015-09-04
简单地说 有一个表 类似

IDABC
1xxyyZZ
2XXyyzz
3XxYyZz
4xxyYZz

其中A列值是有200+水平的factor

如果我想根据A列值给每个记录加标签,例如

for (i in 1:length(A)) {if Ai==xx, Di=3, else if Ai==Xx|Ai==xX, Di=2, else Di=1}(当然D是定义好的空向量啦)

现在问题是A列水平有200+ 每个水平都要放在判断语句里的话会非常臃肿 不知道大家有没有什么好的解决方法?


另 整个表有大约80w条记录 所以200+的水平很正常 也请大家稍微考虑一下内存资源使用情况等等。。。

新手初来乍到 非常感谢!


PS
[最下面那个图不知道怎么删除 不过和本问题没什么关系 大家忽略之~


附件列表
1.png

原图尺寸 15.56 KB

1.png

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2015-9-4 16:20:40
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-9-4 16:37:35
万人往LVR 发表于 2015-9-4 16:20
哇哦 非常感谢!!{:3_59:}

还有个新想法 如果新的记录进来以后 A列是新的值 即没有在Avalue中定义过 那是不是就要报错了。。?
除了在执行sapply之前检查新的值是否在已经定义的Avalue向量中 还有别的方法吗?

多谢前辈!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-9-4 16:37:44
万人往LVR 发表于 2015-9-4 16:20
哇哦 非常感谢!!{:3_59:}

还有个新想法 如果新的记录进来以后 A列是新的值 即没有在Avalue中定义过 那是不是就要报错了。。?
除了在执行sapply之前检查新的值是否在已经定义的Avalue向量中 还有别的方法吗?

多谢前辈!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-9-4 16:49:46
万人往LVR 发表于 2015-9-4 16:20
试验了一次以后就知道了我回复里的问题的答案了~

谢谢前辈
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-9-4 18:12:57
如果很多,那么一个个判断是很浪费效率的,最快最简单是用dictionary
dic <- c("xx" = 1,
             "xX" = 2,
             "Xx" = 2)
也就是把每个level map成一个新的值
然后 D = dic[A]如果A是factor那么 D = dic[as.character(A)]

就可以了
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群