我有一个包含多个年份和变量的数据集。我会指定每个年份和变量的数量,但我正在尝试创建一个脚本,该脚本可以运行,而不必为每个年份/变量复制和粘贴每个块,因此希望代码可以工作,而不考虑这些规范。基本上,对于每个变量,我都有一个膨胀的对应项。比如INCOME和INCOME_INFLATED,我想创建一个手动膨胀版本的INCOME(INCOME_MANUAL),并将其与INCOME_INFLATED进行比较。
下面是我输入数据的一个例子:
| 年份|收入|收入膨胀|CPIU|
| - ------| - ------| - ------| - ------|
| 二○ ○ ○年|一千五百|三千人|第二章|
| 二○ ○一年|一千|一千五百|1.5岁|
| 二○ ○二年|二○ ○ ○年|六千|三个|
下面是我希望输出数据的外观:
| 年份|收入|收入膨胀|CPIU|收入_手册|
| - ------| - ------| - ------| - ------| - ------|
| 二○ ○ ○年|一千五百|三千人|第二章|三千人|
| 二○ ○一年|一千|一千五百|1.5岁|一千五百|
| 二○ ○二年|二○ ○ ○年|六千|三个|六千|
其中income_manual是收入x CPIU。CPIU是一个数字变量,每年都有一个唯一的值。对于一两个变量来说,这很容易,但我很难弄清楚如何在不复制和粘贴每个变量的代码的情况下,为40多个变量实现这一点。
我可以很容易地创建一个相关变量的列表,我只是不知道如何创建一个循环,允许命名和创建新变量,所以用户可以只输入他们的数据文件并运行它。
这段代码成功地创建了按年份筛选的名为"data_[YEAR]"的新数据文件。(年份是变量YEAR中唯一值的列表。)
for (y in years[]) {
dy <- data %>% filter(YEAR == y)
assign(paste0("data_", y), dy)
}
remove(dy)
但是,当我试图将同样的逻辑应用于变量时,它就不起作用了(vars是相关变量的列表)。
for (v in vars[]) {
data <- data %>% mutate(x = v * CPIU)
assign(paste0(v, "_manual"), data$x)
}
它给出了以下错误:
Error in `mutate()`:
! Problem while computing `x = v * CPIU`.
Caused by error in `v * CPIU`:
! non-numeric argument to binary operator
我相当习惯于在bash脚本中执行这些"创建新对象"的操作,但在R中却没有这么多,所以我不确定如何调用这种"字典"。本质上,我如何才能让R将"v"理解为实际的变量,而不是将变量名理解为字符串?
- 实际上,我希望执行以下操作:**
data$income_manual <- data$income * data$CPIU
- 用于许多变量,而不必反复复制和粘贴此行。**
让我知道如果需要更多的细节或背景!非常感谢。
- 我也知道这里有很多问题和这个问题相似,但我不知道如何将它应用到我自己的工作中,我对R还是一个新手,所以我很抱歉有点困惑。*
1条答案
按热度按时间hrysbysz1#
IIUC -您可以使用矩阵运算从变量块中分配 Dataframe 的新列:
要使用
mtcars
进行演示: