gpt4 book ai didi

R - 变异 if + 动态创建列名

转载 作者:行者123 更新时间:2023-12-02 20:00:03 25 4
gpt4 key购买 nike

我的 df 看起来像这样:

df <- read.table(text="
expenses month paid_gas paid_fees paid_hotel name
100 2019-01 20 70 10 Jack Carver
200 2019-02 40 140 20 Jack Carver
", header=TRUE)

我想计算每个带有付费前缀的列创建了多少百分比的费用列。换句话说,我想创建这样的东西:

result <- 
mutate(
prc_gas = paid_gas/expenses
)

但我不想为每一列手动执行此操作,因为我的 df 有数十个paid_列+新创建的列的名称应始终是前缀后的文本。所以结果应该是

 result  <- read.table(text="
expenses month paid_gas paid_fees paid_hotel name prc_gas prc_fees prc_hote
100 2019-01 20 70 10 Jack Carver 20 70 10
200 2019-02 40 140 20 Jack Carver 20 70 10
", header=TRUE)

最佳答案

我们可以将 mutate_at 与命名的 list 函数一起使用来自动创建新列

library (dplyr) # for mutate_at()

df %>% mutate_at(vars(starts_with("paid")), list(prc = ~. / expenses))
# expenses month paid_gas paid_fees paid_hotel name paid_gas_prc
#1 100 2019-01 20 70 10 Jack Carver 0.2
#2 200 2019-02 40 140 20 Jack Carver 0.2
# paid_fees_prc paid_hotel_prc
#1 0.7 0.1
#2 0.7 0.1

请注意,您的示例数据 df 中缺少一些单刻度。


示例数据

df <- read.table(text="expenses     month     paid_gas   paid_fees  paid_hotel   name
100 2019-01 20 70 10 'Jack Carver'
200 2019-02 40 140 20 'Jack Carver'", header=TRUE)

关于R - 变异 if + 动态创建列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56103841/

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