R:将一个因子的水平应用到另一个对象?

时间:2014-12-12 22:56:36

标签: r

我有一个对象,我想将其转换为与另一个现有因子具有相同特征的因子。

我在下面的问题中得到了一些关于如何这样做的见解,但它重新排列了因素的水平。我提出的另一种方法似乎有效。

我提出的方法是脆弱的,还是在所有情况下都能起作用?其他想法?

data(chickwts)

# unfactor the feed variable
test <- c(NA, chickwts$feed)

# method 1
# from question at link below: with(chickwts,data.frame(code=as.numeric(unique(feed)),level=unique(feed)))

test.factor.close <- factor(test[2:length(test)], levels=as.numeric(unique(chickwts$feed)), labels=unique(chickwts$feed))

unique(chickwts$feed == test.factor.close) # TRUE
all.equal(chickwts$feed, test.factor.close) # "Attributes: < Component “levels”: 6 string mismatches >"

# method 2

test.factor.alleq <- factor(test[2:length(test)], levels=as.numeric(sort(unique(chickwts$feed))), labels=levels(chickwts$feed))

all.equal(chickwts$feed, test.factor.alleq) # TRUE

- 关于要素水平的其他问题 -

R: Mapping table of levels and labels of factor variable

1 个答案:

答案 0 :(得分:0)

@rawr在评论中指出,R提供了一种简单而透明的方式将一个对象的属性应用于另一个对象。对于因子,属性包括因子水平/标签。

attributes(test) <- attributes(chickwts$feed)