gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 08:26:33 24 4
gpt4 key购买 nike

我想将 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com