0

如果某项行动发生在首都并且我的数据集包含 34 个国家/地区,我想创建一个假人。此外,有时可能会出现单词位于较大字符串中的情况(例如“Berlin, Germany, DE”)。

假设该列如下所示:

      Location
1    Manchester
2    Berlin
3    Paris, France
4    Kansas

我希望 Dummy 产生以下输出:

      Location          Capital_Dummy
1    Manchester               0
2    Berlin                   1
3    Paris, France            1
4    Kansas                   0

关于我该怎么做的任何想法?

我已经尝试了以下方法,我希望这至少适用于仅在列中出现首都名称但即使这样也没有成功(为简单起见将其缩短)的情况:

capital <- c(“Madrid”, “Berlin”, “Paris”, “Prague”, “Bratislava”)

capital_dummy[df$event_location == capital] <- 1

David Arenburg 提出的问题的解决方案:

capital <- c("Madrid", "Berlin", "Paris", "Prague", "Bratislava")

capital_dummy <- grepl(paste(capital, collapse = "|"), df$Location) + 0L
4

1 回答 1

0

假设您在变量位置中有非结构化文本,您可以使用grepl模式匹配您的大写字母

df <- data.frame(location = c("Manchester", "Berlin", 
                              "Paris, France", "Kansas"))

capital <- c("Madrid", "Berlin", "Paris", "Prague", "Bratislava")

capital_dummy_matrix <- sapply(
    X = paste0("*", capital, "*"), # Pattern for your capitals
    FUN = grepl,
    x = df$location, 
    ignore.case = TRUE)

df$capital_dummy <- apply(
    X = capital_dummy_matrix, 
    MARGIN = 1, 
    FUN = max)

df

> df
       location capital_dummy
1    Manchester             0
2        Berlin             1
3 Paris, France             1
4        Kansas             0

这会产生您想要的输出。但是,如果您提供有关数据结构的更多信息,可能会有更简单的解决方案。

于 2016-04-03T10:50:56.380 回答