【问题标题】:Recode multiple variables in R based on logic基于逻辑在R中重新编码多个变量
【发布时间】:2015-01-21 22:52:53
【问题描述】:

我很想看看你是否可以通过一个函数循环遍历数据集并重新编码变量:

数据看起来像这样:

V1 V2 V3 R1 R2 R3
-----------------
a   r  s  5  5  0
a   b  c  0  1  0
e   r  r  5  6  6

我只想重新编码三个 R 变量。在实际数据集中,至少有 50 个 R 变量需要重新编码。输出应该是这样的,任何大于 0 的都应该是 1,而 0 仍然是 0:

V1 V2 V3 R1 R2 R3
-----------------
a   r  s  1  1  0
a   b  c  0  1  0
e   r  r  1  1  1

【问题讨论】:

  • 你可以使用bitwAnd(a,b),并且每个值都是1
  • df[4:6][df[4:6] > 0] <- 1 应该可以工作
  • 有趣我不熟悉,我去看看有没有帮助
  • 谢谢理查德,如果里面有逗号,它似乎不起作用?
  • 我尝试了 Richard Scriven 的回答,它对我不起作用,我认为方括号中应该有一个逗号

标签: r plyr apply


【解决方案1】:

可以试试 sapply()

(DF 是你的数据集)

DF[,4:6]<-sapply(DF[,4:6],function(x)ifelse(x>0,1,0))

【讨论】:

  • 太好了,我一会儿就试一试
  • 这非常适合重新编码所有内容。有没有办法在仅重新编码所选变量范围的同时维护原始数据帧及其所有变量?
  • @moku 嗯...这应该保留整个数据框,包括未转换的变量。您是否偶然只运行了脚本的右侧?
  • 是的,我现在明白了,所以你的答案是最正确的!但是,当您将逗号添加到 Richard Scriven 的答案中时,它实际上要快得多。非常感谢您的帮助!
【解决方案2】:

你可以试试 -ifelse- 语句 1) 遍历数据集中的所有变量 2)决定它们是否是数字的 3) 重新编码

像这样:

 for (i in 1:ncol(mydata) {
   if (is.numeric(mydata[,i] == "TRUE" {
      mydata[,i] <- ifelse(mydata[,i] > 0, 1, 0 )
  }
}

希望这会有所帮助!

【讨论】:

  • 一些不应该重新编码的变量是数字
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-20
  • 2023-04-06
  • 1970-01-01
相关资源
最近更新 更多