R - 有条件地改变多个列值

use*_*440 -5 r

使用如下数据框:

set.seed(100)
df <- data.frame(id = sample(1:5, 6, replace = TRUE),
                 val1 = rep(c("true", "false"), 3), 
                 val2 = sample(c("true", "false"), 6, replace = TRUE))

  id  val1  val2
1 31  true false
2 26 false  true
3 56  true false
4  6 false  true
5 47  true false
6 49 false false
Run Code Online (Sandbox Code Playgroud)

需要改变在COL的值val1val2TRUE(R逻辑真),如果值"true"FALSE如果值是"false".

这可以通过

df$val1 <- df$val1 == "true"
df$val2 <- df$val2 == "true"
Run Code Online (Sandbox Code Playgroud)

虽然上面的工作,我有一个案例,列数运行到100s.因此需要一种方法来指定要变异的列 - df[,2:3]如上例所示.虽然基础R解决方案是首选,但其他人欢迎.

Cat*_*ath 5

@DavidArenburg的评论答案解释了R如何处理logicals需要成为一个真正的答案imo,在这里复制和粘贴它:

你可以简单地去

df[-1] <- as.logical(unlist(df[-1]))
Run Code Online (Sandbox Code Playgroud)

看看?TRUE:

as.logical试图强迫其参数为逻辑类型.对于因子,这使用级别(标签).像as.vector一样,它会删除包含名称的属性.字符串c("T","TRUE","True","true")被视为true,c("F","FALSE","False","false")被视为false,而所有其他字符串被视为false NA.

所以基本上R是熟悉"true""false",并且知道如何处理它们