假设我有一个包含两列的dataframe:
| 标签1|标签2|
| - -----|- -----|
| 一个|B|
| 一个|C类|
| B| C类|
| C类|一个|
第一列中的A、B和C的值与第二列中的A、B和C的值相同。我希望编码看起来像这样:
| 标签1|标签2|是_A|是_B|是_C|
| - -----|- -----|- -----|- -----|- -----|
| 一个|B|一个|一个|0|
| 一个|C类|一个|0|一个|
| B| C类|0|一个|一个|
| C类|一个|一个|0|一个|
基本上,我只是想让它检查值是否出现在任一列中。如果是,则编码1,如果不是,则编码0。
现在,我知道我可以用if_else
来写这个,像这样:
df <- df %>% mutate(is_A = if_else(label1 == 'A' | label2 == 'A'),
is_B = if_else(label1 == 'B' | label2 == 'B'),
is_C = if_else(label1 == 'C' | label2 == 'C'))
但是我有很多不同的类别,不想写出50多个if_else语句。我也试过这个:
encoded_labels <- model.matrix(~ label1 + label2 - 1, data = df)
但是这创建了用于label 1A与label 1B的单独编码。标签2A等。有没有更简单的方法?
1条答案
按热度按时间5vf7fwbs1#
在R中,你可以尝试:
另一种方式:
请注意,对于
table
,您应该执行以下操作:这将考虑具有多个值的行
如果你想使用
model.matrix
: