你不需要if()
聲明或一個循環。您可以使用邏輯子集。
w <- dataAgg$Import < 5e6L
dataAgg$Land <- as.character(dataAgg$Land)
dataAgg$Land[w] <- abbreviate(dataAgg$Land[w])
dataAgg
# Land Import Export
# 1 Belgien 455223422 5787
# 2 Bulgarien 6151445 115
# 3 Cypr 1683563 95
# 4 Danmark 1007626421 8810
另一種選擇是data.table包。在這裏,我們不需要強制性格,因爲data.table以其迷人的更新因素。
library(data.table)
setDT(dataAgg)[Import < 5e6L, Land := abbreviate(Land)]
如果需要,你可以運行setDT(...)[...][, Land := droplevels(Land)]
之後不再移除舊的水平,使用的縮寫後這給
Land Import Export
1: Belgien 455223422 5787
2: Bulgarien 6151445 115
3: Cypr 1683563 95
4: Danmark 1007626421 8810
。
此外,請注意,abbreviate()
中的默認minlength
是4,因此我們可以將該參數留出。
謝謝,但沒有工作。 '> dataAgg $土地[W] [1] 26等級:比利時Bulgarien Cypern丹麥愛沙尼亞芬蘭Frankrike Grekland愛爾蘭意大利拉脫維亞Litauen盧森堡... Ungern' –
Demandred
@JoakimBäcklund - 我做了編輯。它現在應該工作。我們需要將因子列轉換爲字符。 –