【发布时间】:2016-12-08 16:35:37
【问题描述】:
我有一个如下所示的数据框“宠物”:
PERSON | WEEK | CAT | DOG | BIRD
------------------------------------------------
000001 | 2016-08-29 | CAT | 0 | 0
000002 | 2016-07-25 | 0 | DOG | BIRD
目前我的代码可以用 1 替换相应列中“CAT”、“DOG”和“BIRD”的任何实例:
pets$cat <- ifelse(pets$cat== "cat", 1, 0)
pets$dog <- ifelse(pets$dog== "dog", 1, 0)
pets$bird <- ifelse(pets$bird== "bird", 1, 0)
当有一天我添加了一个名为“LIZARD”的新列时,我想做的是使用一个已经定义的列表来减少整个过程的手动操作。一个我可以更新的列表:
animals <- c("cat","dog","bird")
R 中有没有办法使用该列表基本上运行一个循环,“对于动物中的每个项目,运行 pet$item<- ifelse(pets$item== "item", 1, 0)”?
非常感谢您的帮助。找不到任何类似的问题。
【问题讨论】:
-
pets[, animals] <- +(pets[, animals] != 0)是只有0的列和列名还是“CAT”列中除了“0”和“CAT”之外还有其他标签? -
@rawr 比较应该是
!= "0"? -
@lmo
all(factor(0) == 0, factor('0') == 0, '0' == 0) -
@rawr 感谢您的澄清。因素是一头奇怪的野兽。
-
@rawr 哦,太好了!当我将 0 放在“”中时,效果很好。为了澄清,我只有 0 的实例和每列中的列名。太感谢了!我从您的简单回答中学到了一些新技术。