我试过很多次了如何使用ifelse()合并R中的变量?

时间:2018-10-30 17:51:34

标签: r

我正在研究犯罪数据的样本,我试图合并类似的犯罪类型,因为在名为“ Primary.Type”的列中类型太多。

enter image description here

dd$Primary.Type.new <- ifelse(dd$Primary.Type.new %in% c("SEX OFFENSE", "PROSTITUTION", "OBSCENITY", " CRIM SEXUAL ASSAULT"),"SEX_CRIME",dd$Primary.Type.new)
dd$Primary.Type.new <- ifelse(dd$Primary.Type.new %in% c("DECEPTIVE PRACTICE"),
                  "DECEPTIVE PRACTICE",dd$Primary.Type.new)

然后变成数字:

enter image description here

有人可以告诉我该怎么做,我已经尝试了数千次.....非常感谢您!

1 个答案:

答案 0 :(得分:0)

之所以发生这种情况,是因为您的变量是一个因素。让我们看一个更简单的示例:

x = sample(letters, 1000, replace=TRUE)
df = data.frame(x=x)
table(df$x)

 a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v 
47 45 45 34 37 37 38 43 33 34 38 35 30 41 41 43 32 39 41 47 37 44 
 w  x  y  z 
30 37 35 37 

这如我们所料。但是,如果我们尝试使用ifelse添加新值怎么办?

df$x = ifelse(df$x %in% letters[1:13], toupper(df$x), df$x)
table(df$x)

14 15 16 17 18 19 20 21 22 23 24 25 26  A  B  C  D  E  F  G  H  I 
41 41 43 32 39 41 47 37 44 30 37 35 37 47 45 45 34 37 37 38 43 33 
 J  K  L  M 
34 38 35 30

我们自己编码的toupper(df$x)的值是字符串格式,但是其他返回的值都是数字,这是我们不想要的。

要解决此问题,请在您读取数据的代码中添加stringsAsFactors=FALSE

df = data.frame(x=x, stringsAsFactors=FALSE)
table(df$x)

 a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v 
47 45 45 34 37 37 38 43 33 34 38 35 30 41 41 43 32 39 41 47 37 44 
 w  x  y  z 
30 37 35 37 

df$x = ifelse(df$x %in% letters[1:13], toupper(df$x), df$x)
table(df$x)

 A  B  C  D  E  F  G  H  I  J  K  L  M  n  o  p  q  r  s  t  u  v 
47 45 45 34 37 37 38 43 33 34 38 35 30 41 41 43 32 39 41 47 37 44 
 w  x  y  z 
30 37 35 37