通过条件查找在R数据框中创建新变量

时间:2015-07-14 21:49:05

标签: r dataframe vector conditional

我想在R数据框中创建一个新变量,方法是使用现有列作为同一个表中另一列的查找值。例如,在以下数据框中:

df = data.frame(
  pet = c("smalldog", "mediumdog", "largedog",
             "smallcat", "mediumcat", "largecat"),
  numPets = c(1, 2, 3, 4, 5, 6)
  )

> df

        pet numPets
1  smalldog       1
2 mediumdog       2
3  largedog       3
4  smallcat       4
5 mediumcat       5
6  largecat       6

我想创建一个名为numEnemies的新列,对于小动物来说等于零,但等于相同大小的动物数量,但是大中型动物的物种数量不同。我想最终得到这个:

        pet numPets numEnemies
1  smalldog       1          0
2 mediumdog       2          5
3  largedog       3          6
4  smallcat       4          0
5 mediumcat       5          2
6  largecat       6          3

我尝试这样做的方法是使用条件逻辑生成一个字符变量,然后我可以使用该变量从同一个数据框中查找我想要的最终值,这让我来到这里:

calculateEnemies <- function(df) {
  ifelse(grepl('small', df$pet), 0,
         ifelse(grepl('dog', df$pet), gsub('dog', 'cat', df$pet),
                ifelse(grepl('cat', df$pet),
                       gsub('cat', 'dog', df$pet), NA)))
}

df$numEnemies <- calculateEnemies(df)

> df

        pet numPets numEnemies
1  smalldog       1          0
2 mediumdog       2  mediumcat
3  largedog       3   largecat
4  smallcat       4          0
5 mediumcat       5  mediumdog
6  largecat       6   largedog

我想修改此函数以使用新生成的字符串根据df $ pet中的相应值查找df $ numPets中的值。我也对更好的方法持开放态度。

0 个答案:

没有答案