需要帮助将变量更改为Rstudio中103列中的整数

时间:2019-06-17 08:55:41

标签: r

在将103个列中的3个变量转换为3个特定整数时遇到问题。具体来说:DESPAIR-> =,MEH-> 1和JOY->2。尝试使用case_when,但似乎不起作用。遇到了NA值的问题,并试图通过将它们也设置为0来克服这一问题。但我想完全删除整行。

我尝试使用此功能有2460行和103列。有没有更好的方法或更简单的方法来克服此问题?我也考虑过使用forloop。

  

我尝试使用case_when函数将3个变量更改为其整数值。但这样做很难。

     

不确定如何提供数据,但是为了让您对数据框有所了解,它是103列x 2460行。每行包含一个JOY,MEH或DESPAIR值以及一个NA值。 **

我正尝试将JOY,MEH和DESPAIR值分别更改为2,1和0,通过删除整行完全删除NA值,并保留所有国家/地区值。

Candy_Hierarchy <- tribble(~COUNTRY, ~candy1, ~candy2, ~candy3
              'United States' ,'JOY', 'DESPAIR', 'MEH',
              'Canada', NA, NA, NA, 
              'United Kingdom', 'MEH', 'JOY', 'DESPAIR')
Candy_Hierarchy <- case_when(
  Candy_Hierarchy %% DESPAIR ~ 0,
  Candy_Hierarchy %% MEH ~ 1,
  Candy_Hierarchy %% JOY ~ 2,
  TRUE ~ 0
)

for ( col in 2:length(Candy_Hierarchy)) {
DespairVal <- DESPAIR
Candy_Hierarchy$col[Candy_Hierarchy$col %in% DespairVal] <- 0
MehVal <- MEH
Candy_Hierarchy$col[Candy_Hierarchy$col %in% MehVal] <- 1
JoyVal <- JOY
Candy_Hierarchy$col[Candy_Hierarchy$col %in% JoyVal] <- 2
}
  

不确定第二个是否可行,这只是一个假设。

在尝试代码时收到以下错误:

  

“ eval_tidy(pair $ lhs,env = default_env)中的错误:找不到对象'DESPAIR'”

1 个答案:

答案 0 :(得分:1)

这是一种方法

library(tidyverse)
Candy_Hierarchy <- tribble(~COUNTRY, ~candy1, ~candy2, ~candy3,
                       'United States' ,'JOY', 'DESPAIR', 'MEH',
                       'Canada', NA, NA, NA, 
                       'United Kingdom', 'MEH', 'JOY', 'DESPAIR')



# Make a function to recode variables
f <- function(x){
  recode(x, 'JOY' = 2, 'MEH' = 1, 'DESPAIR' = 0)}

Candy_Hierachy2 <- Candy_Hierarchy %>% 
  drop_na()  
  # apply recode function to all columns except COUNTRY
  mutate_at(.vars = vars(-COUNTRY), .funs = f)