我有2列数据具有相同类型的数据(字符串).
我想加入列的级别.即.我们有:
col1 col2
Bob John
Tom Bob
Frank Jane
Jim Bob
Tom Bob
... ... (and so on)
Run Code Online (Sandbox Code Playgroud)
现在col1有4个等级(Bob,Tom Frank,Jim),col2有3个等级(John,Jane,Bob)
但是我希望两个列都具有所有因子级别(Bob,Tom,Frank,Jim,Jane,John),以便稍后用唯一的id替换每个'names',这样最终的输出将是:
col1 col2
1 5
2 1
3 6
4 1
2 1
Run Code Online (Sandbox Code Playgroud)
那是两个列中的Bob - > 1,Tom - > 2等.
有任何想法吗 :) ?
编辑:谢谢大家的精彩答案!据我所知,你们都很棒:)
dar*_*zig 11
x <- structure(list(col1 = structure(c(1L, 4L, 2L, 3L, 4L), .Label = c("Bob", "Frank", "Jim", "Tom"), class = "factor"), col2 = structure(c(3L, 1L, 2L, 1L, 1L), .Label = c("Bob", "Jane", "John"), class = "factor")), .Names = c("col1", "col2"), class = "data.frame", row.names = c(NA, -5L))
Run Code Online (Sandbox Code Playgroud)
建立因子名称的简单联合:
both <- union(levels(x$col1), levels(x$col2))
Run Code Online (Sandbox Code Playgroud)
并重新考虑这两个因素:
x$col1 <- factor(x$col1, levels=both)
x$col2 <- factor(x$col2, levels=both)
Run Code Online (Sandbox Code Playgroud)
编辑后:添加了从因子中生成数值的示例
您可以简单地将因子级别转换为数值,例如:
as.numeric(x$col1)
Run Code Online (Sandbox Code Playgroud)
或者更简单,更好的解决方案基于@Gavin Simpson的一步提示:
data.matrix(x)
Run Code Online (Sandbox Code Playgroud)
您希望因子包含两列中的所有唯一名称.
col1 <- factor(c("Bob", "Tom", "Frank", "Jim", "Tom"))
col2 <- factor(c("John", "Bob", "Jane", "Bob", "Bob"))
mynames <- unique(c(levels(col1), levels(col2)))
fcol1 <- factor(col1, levels = mynames)
fcol2 <- factor(col2, levels = mynames)
Run Code Online (Sandbox Code Playgroud)
编辑:如果你用这个替换第三行更好一点:
mynames <- union(levels(col1), levels(col2))
Run Code Online (Sandbox Code Playgroud)