如何在列中获取字符串的第一个字并获得它的级别?

时间:2017-07-22 03:57:24

标签: r dataframe levels

我有一个数据框df,如:

      v1
1    "john lins"  
2    "carl sagan"  
3    "mary lee"
4    "sara jones"
5    "john Santos"
6    "mary jones"

我需要获得名字,所以我使用gsub()来做,如:

df[,2] <- gsub("(\\w+).*", "\\1", df[,1])

然后我得到了:

      v1              v2
1    "john lins"     "john"  
2    "carl sagan"    "carl"  
3    "mary lee"      "mary"
4    "sara jones"    "sara"
5    "john Santos"   "john"
6    "mary jones"    "mary"

但现在我需要获得df$v2的等级。

我认为levels(df$v2)我会得到类似的结果:

[1]  "john"   "carl"    "mary"   "sara"

但相反,它会返回NULL 有没有办法达到它的水平?

2 个答案:

答案 0 :(得分:0)

没有级别,因为它仍然只是一个字符串向量。将它转换为一个因子,你应该得到水平。 (levels(factor(df$v2))

答案 1 :(得分:0)

这里有几个问题。

  1. v2中没有列v(小写df)。因此,levels(df$v2)正在尝试访问不存在的列。
  2. 但即使使用正确的列名V2(大写Vlevels(df$V2)也会失败,因为V2不是一个因素。
  3. 通过致电

    揭示了这一点
    str(df)
    
    'data.frame': 6 obs. of  2 variables:
     $ v1: Factor w/ 6 levels "carl sagan","john lins",..: 2 1 5 6 3 4
     $ V2: chr  "john" "carl" "mary" "sara" ...
    

    如果您使用V2中的唯一名称,则可以直接致电

    unique(df$V2)
    
    [1] "john" "carl" "mary" "sara"
    

    获得独特的&#34;级别&#34;。

    这相当于

    levels(factor(df$V2))
    
    [1] "carl" "john" "mary" "sara"
    

    (see rmuraglia's answer)但请注意factor()按字母顺序对级别进行排序,而unique()按照外观顺序保留唯一值。

    数据

    df <- data.frame(v1 = c("john lins",   
                            "carl sagan",   
                            "mary lee",
                            "sara jones",
                            "john Santos",
                            "mary jones"))
    df[, 2] <- gsub("(\\w+).*", "\\1", df[, 1])