在将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'”
答案 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)