首页 > 解决方案 > 从具有模式匹配的列创建列

问题描述

我有一个包含两位数国家代码列的数据框。某些行可能包含多个代码。这是一个三行的小例子。

df <- structure(list(ID =  c("US", "US, US","CA,CA,CA,MX,US,IN")), 
                .Names=c("ID"), row.names = c("1", "2", "3"), class = ("data.frame"))

我想根据column ID以下内容创建两列:

df <- structure(list(ID         = c("US", "US, US","CA,CA,CA,MX,US,JP,IN"), 
                     all_US     = c(1,1,0), 
                     partial_US = c(0,0,1)), 
                     .Names     = c("ID", "all_us", "partial_us"),   row.names = c("1", "2","3"), class = ("data.frame"))

partial_US等于1如果行中至少有一个"US"

all_US 等于1如果所有值都是"US"

标签: rdataframepattern-matching

解决方案


您可以使用grepl

 df$all_us= +grepl("^(US[, ]*)+$", df$ID)

 df$partial_us = grepl("US",df$ID) - df$all_us
 df
                 ID all_us partial_us
1                US      1          0
2            US, US      1          0
3 CA,CA,CA,MX,US,IN      0          1

你可以这样做:

 transform(df,all_us=a<-+grepl("^(US[, ]*)+$",ID), partial_us = grepl("US", ID) - a)
                 ID all_us partial_us
1                US      1          0
2            US, US      1          0
3 CA,CA,CA,MX,US,IN      0          1

推荐阅读