найти строковую переменную в каждой строке и создать новую переменную в R - PullRequest
1 голос
/ 25 сентября 2019

Для каждой строки моего набора данных у меня есть несколько строковых переменных.

например,

  var1     var1      var3      var4
1 mother   daughter  house     tea 
2 mother   father    daughter  NA
3 house    tea       pencil    paper

Я хочу создать новую переменную (новую), если в строке одна из следующихслова существуют:

мать, отец, дочь так:

  var1     var1      var3      var4     new
1 mother   daughter  house     tea      1
2 mother   father    daughter  NA       1
3 house    tea       pencil    paper    0

Есть ли способ сделать это?Я даже не знаю с чего начать, к сожалению.

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

Да, есть способ.Вот один из них:

our_strings <- c("mother", "daughter", "father")
df$new <- as.integer(apply(df, 1, function(x) any(x %in% our_strings)))
df

#   V1   var1     var2     var3  var4 new
# 1  1 mother daughter    house   tea   1
# 2  2 mother   father daughter  <NA>   1
# 3  3  house      tea   pencil paper   0

Воспроизводимые данные:

df <- data.frame(
  V1   = 1:3, 
  var1 = c("mother", "mother", "house"), 
  var2 = c("daughter", "father", "tea"), 
  var3 = c("house", "daughter","pencil"), 
  var4 = c("tea", NA, "paper")
)
0 голосов
/ 25 сентября 2019

Мы можем использовать rowSums

df$new <- +(rowSums(df == "mother" | df == "daughter" | df == "father", na.rm = TRUE) > 0)

df
#    var1     var2     var3  var4 new
#1 mother daughter    house   tea   1
#2 mother   father daughter  <NA>   1
#3  house      tea   pencil paper   0

ИЛИ lapply

df$new <- +(Reduce(`|`, lapply(df, `%in%`, c("mother", "daughter", "father"))))

Мы также можем использовать pmap_int из purrr

library(dplyr)
library(purrr)

df %>%
  mutate(new = pmap_int(., ~+(any(c(...) %in% c("mother", "daughter", "father")))))

данные

df <- structure(list(var1 = c("mother", "mother", "house"), var2 = 
c("daughter", "father", "tea"), var3 = c("house", "daughter", "pencil"), 
var4 = c("tea", NA, "paper")), row.names = c("1", "2", "3"), class = "data.frame")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...