我有一个数据框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
有没有办法达到它的水平?
答案 0 :(得分:0)
没有级别,因为它仍然只是一个字符串向量。将它转换为一个因子,你应该得到水平。 (levels(factor(df$v2))
)
答案 1 :(得分:0)
这里有几个问题。
v2
中没有列v
(小写df
)。因此,levels(df$v2)
正在尝试访问不存在的列。V2
(大写V
)levels(df$V2)
也会失败,因为V2
不是一个因素。通过致电
揭示了这一点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])