我想變換使用一些映射函數的給定列的值。例如:映射列的值
df <- data.frame(A = 1:5, B = sample(1:20, 10))
df
A B
1 1 17
2 2 5
3 3 3
4 4 11
5 5 19
6 1 16
7 2 4
8 3 7
9 4 6
10 5 9
我的目標是列A的所有元素映射如下:
1 -> "tt"
2 -> "ff"
3 -> "ss"
4 -> "fs"
5 -> "sf"
我寫了下面的:
mappingList <- c("tt", "ff", "ss", "fs", "sf")
df$A <- unlist(lapply(df$A, function(x){replace(x, x>0, mappingList[x])}))
df
A B
1 tt 17
2 ff 5
3 ss 3
4 fs 11
5 sf 19
6 tt 16
7 ff 4
8 ss 7
9 fs 6
10 sf 9
代碼爲上述工作的罰款。
現在讓我們假設另一個數據幀,其中A列不言整數1,2,3,4,5,而是任何其他「通用」的項目,說:
df <- data.frame(A = paste("str",1:5,sep=""), B = sample(1:20, 10))
或
df <- data.frame(A = seq(5, 25, by=5), B = sample(1:20, 10))
問題:你會如何編寫映射?
具體地說'DF $ A < - 因子(DF $ A,水平= C (「str1」,「str2」,「str3」,「str4」,「str5」),labels = c(「tt」,「ff」,「ss」,「fs」,「sf」)) df $ A < - 因子(df $ A,levels = c(5,10,15,20,25),labels = c(「tt」,「ff」,「ss」,「fs」,「sf」) )' – MrFlick
太棒了,我喜歡使用命名向量查找表的想法。 Thx很多Ananda! – Riad
@Riad,SO用戶的相關閱讀[@PaulHiemstra](http://stackoverflow.com/users/1033808/paul-hiemstra):http://www.numbertheory.nl/2014/01/25/vectorisation-is - 您-最好的朋友-替換一對多元素-IN-A-字符向量/ – A5C1D2H2I1M1N2O1R2T1