if()语句中的abbreviate()

时间:2015-10-28 23:45:31

标签: r

如果 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)

1 个答案:

答案 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,因此我们可以将该参数保留。