如果 Land
小于(<)5000000,我想将Import
列缩写为4个字母。
数据:
> head(dataAgg)
Land Import Export
1 Belgien 455223422 5787
2 Bulgarien 6151445 115
3 Cypern 1683563 95
4 Danmark 1007626421 8810
我认为这样的事情会起作用:
if(dataAgg$Import < 5000000) abbreviate([i], 4)
答案 0 :(得分:10)
您不需要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)]
给出了
Land Import Export
1: Belgien 455223422 5787
2: Bulgarien 6151445 115
3: Cypr 1683563 95
4: Danmark 1007626421 8810
如果需要,您可以在之后运行setDT(...)[...][, Land := droplevels(Land)]
以删除缩写后不再使用的旧级别。
另请注意,minlength
中的默认abbreviate()
为4,因此我们可以将该参数保留。