在R

时间:2018-01-26 17:36:33

标签: r

我正在尝试根据其他两列的值创建一个新列。初始列中的值为1和2.对于新列,如果前两列中任何一列中的值为1,则我希望该值为1,否则为0。 (如果此人是VegetarianVegan,则VegYesNo列应为1.否则,应为0)。

Vegetarian Vegan VegYesNo
1          2     1
2          2     0
2          1     1

我已经在这里搜索了其他问题并且找不到给我答案的问题,但是如果你知道一个有效的解决方案的问题,请告诉我。

3 个答案:

答案 0 :(得分:1)

你可以这样做:

mydata$VegYesNo <- as.integer(rowSums(mydata == 1) > 0)

或者用:

mydata$VegYesNo <- 1 * (rowSums(mydata == 1) > 0)

结果:

> mydata
  Vegetarian Vegan VegYesNo
1          1     2        1
2          2     2        0
3          2     1        1

数据:

mydata <- read.table(text="Vegetarian Vegan VegYesNo
1          2     1
2          2     0
2          1     1", header=TRUE)[,-3]

答案 1 :(得分:0)

我想你有data.frame

data = data.frame(vegetarian = c(1,2,2),Vegan = c(2,2,1))
data$VegYesNo = as.numeric(data$vegetarian==1 | data$Vegan==1)

答案 2 :(得分:0)

使用dplyr包:

mydf <- text <- "Vegetarian Vegan
1          2
2          2
2          1"
mydf <- read.table(text = text, header = TRUE)

library(dplyr)
mydf %>% 
    mutate(VegYesNo=case_when(
        Vegetarian==1 | Vegan==1 ~ 1,
        TRUE ~ 0
    ))

结果是:

  Vegetarian Vegan VegYesNo
1          1     2        1
2          2     2        0
3          2     1        1