r - if() 语句中的 abbreviate()

标签 r

我想将 Land 列缩写为 4 个字母 if Import 小于 (<) 5000000。

数据:

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

最佳答案

您不需要 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)] 以删除不再使用的旧关卡缩写。

另外,请注意 abbreviate() 中的默认 minlength 是 4,因此我们可以省略该参数。

关于r - if() 语句中的 abbreviate(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33403529/

相关文章:

R - 将对象存储在列表中

R:map2SpatialPolygons 中的 ID

r - 如何每天运行两次 R 脚本?

r - 在 R 中查找变量的类

r - 如何在不更改 R 中的工作目录的情况下访问子文件夹中的指定文件?

r - 以相反的方向创建水平条形图

r - 根据指定的值差异过滤 ID

r - 从 R 中的因子变量创建逻辑变量

使用 qplot 和 stat_smooth 检索线性模型方程

r - 按 R 中的中值折叠重复行