【发布时间】:2018-08-01 12:00:01
【问题描述】:
df <- data.frame (address.1.line = c("apartment 5", "25 spring street", "nice house"), address.2.line = c("london", "new york", "apartment 2"), address.3.line = c("", "", "paris"))
我正在尝试创建一个在数据框中返回新列的函数。该列应该是附加到原始数据帧的虚拟变量,指示 3 个地址行变量中的任何一个是否包含字符串(或字符串选择)。
例如,在上面的示例中,我希望 df 有一个名为“Apartment_dummy”的新变量,指示在三个地址行中的任何一个中都存在字符串片段“apartment”---所以它在第 1 行中取 1和 3,第 0 行为零。该函数需要 2 个参数,因此:要创建的新虚拟变量的名称,以及需要在地址变量中检测的相应字符串片段。
我尝试了以下方法。它将返回一个虚拟变量,但不会为新变量提供正确的名称。另外,我觉得必须有一种方法可以一步完成。有任何想法吗?非常感谢!
library(tidyverse)
premises_dummy <- function(varname = NULL, strings = NULL) {
df %<>% mutate_at(.funs = funs(flagA = str_detect(., strings)), .vars = vars(ends_with(".line"))) %>%
mutate(varname = ifelse(rowSums(select(., contains("flagA"))) > 0, 1, 0))
return(df)
}
df <- premises_dummy(varname = 'Apartment_dummy', strings = 'apartment')
【问题讨论】: