【问题标题】:Using a loop to create new columns in dataframe with the same pattern使用循环在具有相同模式的数据框中创建新列
【发布时间】:2020-07-09 09:47:50
【问题描述】:

我想在生成年度数据的数据框中创建新列 我拥有的变量是:

id_net_profit_20M05
id_op_income_20M05

这是数据集的样子:

company  ip_net_profit_20M05  ip_op_income_20M05 ip_pl_bef_tax

 x            121                     185              129
 y            145                     87               175

我想创建不同会计年度的年化变量:

id_net_profit_Y_20M05 <- id_net_profit_20M05*12/5
id_op_income_Y_20M05 <- id_op_income_20M05*12/5

循环将为我拥有的所有变量完成工作,但以下变量不起作用:

variables<-c("id_net_profit", "id_op_income")
for (v in variables){
  DF$paste0(v,"_20M05_Y",sep="")<- DF$paste0(v,"_20M05",sep="")*12/5
}

你知道为什么吗?

非常感谢

【问题讨论】:

  • 请添加一些数据,例如输入和输出数据帧的 sn-p
  • 我添加了一些可能代表我的数据集的数据
  • 您期望的输出是什么?您能否添加一个示例来说明所需输出的外观?

标签: r loops dataframe


【解决方案1】:

for 中的代码行替换为以下内容:

DF[paste0(v,"_20M05_Y",sep="")] <- DF[paste0(v,"_20M05",sep="")]*12/5

您无法仅使用DF$paste0(...) 访问DF

我为你发布了这个额外的例子:

set.seed(1)
df <- data.frame(var1 = rnorm(10), var2 = rnorm(10))
DF$paste0("var", 1) # here you get an error
DF[paste0("var", 1)] # here you don't get an error

【讨论】:

    【解决方案2】:

    假设您的 data.frame 名为 df,格式如下:

    str(df)
    'data.frame':   2 obs. of  4 variables:
      $ company            : chr  "x" "y"
    $ ip_net_profit_20M05: num  121 145
    $ ip_op_income_20M05 : num  185 87
    $ ip_pl_bef_tax      : num  129 175 
    

    那你可以试试

    variables<- names(df)[2:3]
    for (i in variables){
        df[,paste0(i,"_20M05_Y",sep="")] <- df[,i]*12/5
    }
    df
    company ip_net_profit_20M05 ip_op_income_20M05 ip_pl_bef_tax ip_net_profit_20M05_20M05_Y ip_op_income_20M05_20M05_Y
    1       x                 121                185           129                       290.4                      444.0
    2       y                 145                 87           175                       348.0                      208.8
    

    或者使用另一种 tidyverse 方式

    library(tidyverse)
    df %>% 
      mutate_at(vars(2,3), list(`20M05_Y` = ~.*12/5), .names="{col}_{fn}")
    

    【讨论】:

      猜你喜欢
      • 2020-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-25
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多