是這樣的模擬數據:定義因素,其水平依賴於另一個變量
set.seed(20120220)
x <- c(rep("a", 4), rep("b", 4))
y <- c(sample(c(1, 2), 8, replace = TRUE))
z <- data.frame(cbind(x, y))
數據幀z
看起來就像這樣:
x y
1 a 1
2 a 1
3 a 1
4 a 2
5 b 2
6 b 1
7 b 2
8 b 2
我想運行到factor(z$y, levels = 1:2, labels = c("alpha", "beta"))
一個類似於,但我不不想讓每個1
變成alpha
,並且每個2
變成beta
。我希望這發生只有爲x = a
。如果x = b
,我想1
變成gamma
和2
變成delta
。
換句話說,我希望我的數據幀,看起來像這樣:
x y
1 a alpha
2 a alpha
3 a alpha
4 a beta
5 b delta
6 b gamma
7 b delta
8 b delta
這是我想出了這麼遠:
for (i in 1:nrow(z)) {
if (z$x[i] == "a")
z$y[i] <- factor(z$y[i], levels = 1:2, labels = c("alpha", "beta"))
else
z$y[i] <- factor(z$y[i], levels = 1:2, labels = c("gamma", "delta"))
}
但它給了我好幾個警告信息(爲每個i
)是這樣的:
Warning messages:
1: In `[<-.factor`(`*tmp*`, i, value = c(NA, 1L, 1L, 2L, 2L, 1L, 2L, :
invalid factor level, NAs generated
然後,當我打電話z
再次,數據幀亂七八糟,每y
已被製作成<NA>
。
我敢打賭,這是一個簡單的解決方案,但我一直在嘗試小時幾種方法無濟於事。我的頭即將爆炸!幫幫我!
不能只需添加多種因素的新列級1:4和標籤「阿爾法」,「測試版」,「伽馬」,「三角洲」?它沒有任何意義(我懷疑是可能的)有兩個級別,但有4個標籤的因素... – digEmAll 2012-02-20 20:37:07
我可以在一個小數據集上做到這一點,比如上面的一個,但我的實際問題有幾千行,該方法不切實際。 – 2012-02-20 20:52:20
看看我的回答 – digEmAll 2012-02-20 21:17:05