我对R很陌生,不知道如何根据其值查找变量,然后将其转换为数字。
我看过How do I change a value coded as "Yes" to a value of 1 in R?和Convert data.frame column format from character to factor。
这些是我的例子。我基本上是将仅具有“ N”和“ Y”的字符变量分别转换为0和1。在逐一检查了一些变量之后,我想知道是否有解决此问题的更快方法。显然还有其他字符变量没有“ Y” /“ N”,因此我不想只查找所有字符变量并将其转换为数字。如果您有任何想法请告诉我!
我的代码:
df$var3<- ifelse(df$var3=="Y",1,0)
df$var4<- ifelse(df$var4=="Y",1,0)
df$var6<- ifelse(df$var5=="Y",1,0)
df$var7<- ifelse(df$var1=="Y",1,0)
样本df(之前):
n = c(2, 3, 5, 8, 10)
var1 = c("aa", "bb", "cc", "dd", "ee")
var2 = c(TRUE, FALSE, TRUE, TRUE, TRUE)
var3 = c("Y", "N", "Y", NA, "N")
var4 = c("Y", "N", "Y", NA, "Y")
var5 = c("aa", "bb", "cc", "dd", "ee")
var6 = c("Y", "N", "Y", "Y", "N")
var7 = c("Y", "N", "Y", "N", "N")
df = data.frame(n, var1, var2, var3,var4,var5,var6,var7)
df <- data.frame(lapply(df, as.character), stringsAsFactors = FALSE)
样本df(发布,我想要的):
n = c(2, 3, 5, 8, 10)
var1 = c("aa", "bb", "cc", "dd", "ee")
var2 = c(TRUE, FALSE, TRUE, TRUE, TRUE)
var3 = c("1", "0", "1", NA, "0")
var4 = c("1", "0", "1", NA, "1")
var5 = c("aa", "bb", "cc", "dd", "ee")
var6 = c("1", "0", "1", "1", "0")
var7 = c("1", "0", "1", "0", "0")
df = data.frame(n, var1, var2, var3,var4,var5,var6,var7)
答案 0 :(得分:4)
最简单的选择是(如果我们知道列的索引)子集感兴趣的列,将其转换为逻辑矩阵(==
),将其强制转换为二进制(+
),然后将其分配回感兴趣的列
i1 <- c(4, 5, 7, 8)
df[i1] <- +(df[i1] == "Y")
如果我们没有索引,必须逐一检查每一列,然后遍历各列,检查它是否为factor
并仅具有级别“ N”,“ Y”,然后进行转换逻辑向量,并使用as.integer将其更改为integer
df[] <- lapply(df, function(x) if(is.factor(x) && all(levels(x) %in% c("Y", "N")))
as.integer(x == "Y") else x)
答案 1 :(得分:0)
以下解决方案可用于R base,而无需加载其他R包:
如果您希望在整个数据框中进行更改,则可以使用以下几行。在此特定情况下使用[elseif]的缺点是,您必须设置[else]值,否则可能会覆盖某些数据。
df[df == 'N'] <- 0
df[df == 'Y'] <- 1