在R中高效地将多个变量从字符重新编码为数值
我使用R(版本3.2.3)将多个变量(在同一数据帧中)从字符值(“高”、“中”、“低”和“无问题”)重新编码为数值(4、3、2和1)。我知道有几种方法可以重新编码一个变量,在我下面的例子中,我在car包中使用了“recode”函数。当重新编码单个变量时,这很好,但当我指定多个变量(第45列至第68列)时,所有值都替换为“N/a”在R中高效地将多个变量从字符重新编码为数值,r,r-car,recode,R,R Car,Recode,我使用R(版本3.2.3)将多个变量(在同一数据帧中)从字符值(“高”、“中”、“低”和“无问题”)重新编码为数值(4、3、2和1)。我知道有几种方法可以重新编码一个变量,在我下面的例子中,我在car包中使用了“recode”函数。当重新编码单个变量时,这很好,但当我指定多个变量(第45列至第68列)时,所有值都替换为“N/a” df[,c(45:68)]尝试以下方法: df[,c(45:68)] <- lapply(df[,c(45:68)], function(x)
df[,c(45:68)]尝试以下方法:
df[,c(45:68)] <- lapply(df[,c(45:68)], function(x)
recode(x,"'High'=4;
'Medium'=3;
'Low'=2;
'No Concerns'=1",
as.numeric.result=TRUE))
df[,c(45:68)]含有dplyr和hablar的溶液:
library(dplyr)
library(hablar)
df <- df %>%
mutate_at(vars(45:68),
funs(case_when(x == 'High' ~ 4,
x == 'Medium' ~ 3,
x == 'Low' ~ 2;
x == 'No Concerns' ~ 1))) %>%
convert(num(x))
库(dplyr)
图书馆(hablar)
df%
变异_at(vars(45:68)),
funs(当(x=‘高’~4,
x==“中等”~3,
x==“低”~2;
x=='没有问题'~1))%>%
转换(数量(x))
这对我来说效果更好,特别是因为recode
命令对公式更敏感:
items<-c("a","b","c")
df[items] <- lapply(df[items], function(x) ifelse(x=="STRONGLY AGREE", 6,
ifelse(x=="AGREE", 5,
ifelse(x=="SLIGHTLY AGREE", 4,
ifelse(x=="SLIGHTLY DISAGREE", 3,
ifelse(x=="DISAGREE", 2,
ifelse(x=="STRONGLY DISAGREE", 1,0)))))))
itemsWelcome to StackOverflow!关于在你的问题中提供足够的细节:请阅读关于和如何给出答案的信息。这将使其他人更容易帮助你。也许只需使用data.matrix
:例如as.data.frame(泰坦尼克号)
与data.matrix(as.data.frame(泰坦尼克号))
。拖拉症最大值-感谢您提出一个好问题并提供一个可行示例的建议。
items<-c("a","b","c")
df[items] <- lapply(df[items], function(x) ifelse(x=="STRONGLY AGREE", 6,
ifelse(x=="AGREE", 5,
ifelse(x=="SLIGHTLY AGREE", 4,
ifelse(x=="SLIGHTLY DISAGREE", 3,
ifelse(x=="DISAGREE", 2,
ifelse(x=="STRONGLY DISAGREE", 1,0)))))))