对data.frame中的值进行分类

时间:2015-02-23 21:03:42

标签: r data-cleaning

我有以下示例数据框:

> df <- data.frame(v=c("a", "a", "b", "b", "c", "d", "d"))
> df
  v 
1 a 
2 a 
3 b 
4 b 
5 c 
6 d 
7 d 

我想基于某些任意映射将这些值分类到一个单独的列中。例如:

  • a - &gt; X
  • b - &gt; X
  • c - &gt; ÿ
  • d - &gt; ÿ

之后,我会有以下内容:

  v cat
1 a   x
2 a   x
3 b   x
4 b   x
5 c   y
6 d   y
7 d   y

谢谢

2 个答案:

答案 0 :(得分:4)

这是一个选项:

使用映射创建一个命名向量:

x <- c(a = "x", b = "x", c = "y", d = "y")

然后使用命名向量添加新列:

df$cat <- x[df$v]
df
#  v cat
#1 a   x
#2 a   x
#3 b   x
#4 b   x
#5 c   y
#6 d   y
#7 d   y

答案 1 :(得分:2)

以下是使用data.frame编写映射的一个选项:

library(plyr)

mapping = data.frame(v=letters[1:4], cat=c("x","x","y","y"))

join(df, mapping, by='v')
#  v cat
#1 a   x
#2 a   x
#3 b   x
#4 b   x
#5 c   y
#6 d   y
#7 d   y

或直接基于R

merge(df, mapping, by='v')
#  v cat
#1 a   x
#2 a   x
#3 b   x
#4 b   x
#5 c   y
#6 d   y
#7 d   y