当前位置: 首页 > 知识库问答 >
问题:

改变字符列以使用 R 中的 else if 语句调整膨胀值

艾意蕴
2023-03-14

我正在尝试在我的数据框中突变一列工资,以调整通货膨胀,因为我有一个名为adj_SALARY的多年样本。工资列是一个字符向量(由unadj_SALARY表示),我需要将值乘以居民消费价格指数(如下所示为分数)的比率,以将所有值转换为2017年美元。我还有列作为虚拟变量,指示YEAR_2014,YEAR_2015,YEAR_2016,YEAR_2017和YEAR_2018。我已尝试运行下面的代码,但仍然遇到一条错误消息,“在 if (YEAR_2014 == 1) { :条件的长度

enter code here NHIS_test <- NHIS1 %>% 
   mutate(adj_SALARY = if(YEAR_2014 == 1) {
as.numeric(as.character(NHIS1$unadj_SALARY))*(242.839/230.280) }
else if(YEAR_2015 == 1) { 
  as.numeric(as.character(NHIS1$unadj_SALARY))*(242.839/233.916) }
else if (YEAR_2016 == 1) {
  as.numeric(as.character(NHIS1$unadj_SALARY))*(242.839/233.707) }
else if (YEAR_2017 == 1) {
  as.numeric(as.character(NHIS1$unadj_SALARY))*(242.839/236.916)}
else if (YEAR_2018 == 1) { 
  as.numeric(as.character(NHIS1$unadj_SALARY))*(1)})

共有1个答案

谭玄天
2023-03-14

我们可以使用ifelse/case_when而不是如果/elseifelse是矢量化的

library(dplyr)
NH1S1 %>%
     mutate(unadj_SALARY = as.numeric(as.character(unadj_SALARY)),
            adj_SALARY = 
             case_when(
                YEAR_2014 == 1 ~  unadj_SALARY *(242.839/230.280),
                      YEAR_2015 == 1 ~  unadj_SALARY *(242.839/233.916),
                      YEAR_2016 == 1 ~ unadj_SALARY *(242.839/233.707),
                      YEAR_2017 == 1 ~ unadj_SALARY *(242.839/236.916),
                      YEAR_2018 == 1 ~ unadj_SALARY))

注意:与其在'unadj_SALARY'上多次执行数字转换,不如执行一次,然后将其用于进一步的转换/计算

 类似资料:
  • ExpansionTile从ListTile继承,ListTile具有固定的高度。没有瓷砖高度的输入arg。 我尝试用一个硬编码高度将ExpansionTile包装在容器小部件中,但这导致子小部件只占用硬编码高度内的空间。目前,由于小部件中的内容很大,我有一条“Column Overflow by 23 pixels”消息。

  • 原件: “lorem ipsum dolor sit amet,consectetur adipiscing elit.Sed rutrum imperdiet versit.Nulla eu sapien tincidunt,pellentesque ipsum in,lucuts eros.Nullam tristique arcu lorem,at fringilla lectus tinc

  • 我试图将我的GLSurfaceView设置在xml布局以及其他UI元素上,并不断获得错误inflating类com.vi.cubo01。MyGLSurfaceView在LogCat. 以下是java代码: 以及xml:

  • 我在自定义控件中膨胀MvxImageView时遇到问题。 从我所做的研究中,我发现了几个嫌疑人 > < li >我是否应该将“如果”添加到“什么”中?(我看到这是关于android地图视图膨胀错误。 < li> 我创建的用户控件是不是都错了?我看到了一个使用SetContentView()而不是inflate的建议,因为它通过mvvmcross机制传递indlate请求,但在自定义视图中没有这样的

  • 我认为这非常简单,但我似乎找不到答案。 我正在编写一个IF语句,但测试是对象是否返回一个值。我不确定如何处理语句中的。 假设<代码>测试 它似乎仍然不起作用.....

  • 问题内容: 您好,我是android dev和admob的新手。我正在尝试制作一个带有按钮,几个页面和底部的admob的简单测试应用程序。一切正常,直到我尝试实施admob。这是我的代码: HelloAndroid.java: main.xml: 您好android清单: logcat输出: 我正在使用GoogleAdMobAdsSdkAndroid-6.0.0。再次,我对此非常陌生,我尝试在多个