【发布时间】:2017-03-29 16:05:49
【问题描述】:
情况如下:我有一列“a”属于字符类,包含许多整数。每个整数代表一个类别。我想知道每个观察都包含哪些独特的级别。 b 列代表期望的结果:清除重复项,但代表每个唯一级别。 我想知道的是如何清理a列,使其看起来像b列。我需要实现 60k 行的解决方案。
a b
1 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5 | 4, 5
2 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 | 2
3 86, 86, 86, 86, 86, 37, 37, 37, 37, 37, 37, 8, 8 | 86, 37, 8
a <- c("4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5", "2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2", "86, 86, 86, 86, 86, 37, 37, 37, 37, 37, 37, 8, 8")
b <- c("4, 5", "2", "86, 37, 8")
df <- data.frame(a, b)
我已经阅读了一些关于删除重复因子值的帖子,但是您可以自己尝试一下,这不会产生任何有用的信息。
droplevels(factor(df$a))
这样基本解决了问题,但是对于60k行是不可行的。
df$a[1] <- factor(unique(as.numeric(unlist(str_extract_all(df$a[1], "[[:digit:]]+")))))
df$a[2] <- factor(unique(as.numeric(unlist(str_extract_all(df$a[2], "[[:digit:]]+")))))
df$a[3] <- factor(unique(as.numeric(unlist(str_extract_all(df$a[3], "[[:digit:]]+")))))
【问题讨论】:
-
值得问自己一个问题,我的数据格式是否正确?如果您的字符串中充满了逗号分隔的数字,那么您可能真的想要创建一个向量列表或一个分组数据框。
标签: r concatenation levels