r - 从具有模式匹配的列创建列
问题描述
我有一个包含两位数国家代码列的数据框。某些行可能包含多个代码。这是一个三行的小例子。
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"
。
解决方案
您可以使用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
推荐阅读
- hadoop - 运行解释是否安全
在生产数据库上 - ios - CoreBluetooth / L2CAP 通道,不工作
- hazelcast - 监听重新分区事件?
- paypal - Paypal 参考交易 Webhook
- ubuntu - 如何在 Ubuntu 16.04 中安装 less-plugin-clean-css
- javascript - 如何在字符串中的第二个逗号后切片/提取 8 个字符?注意:动态字符串长度,逗号位置不是静态的
- node.js - Foreach 无法将每条记录推送到 NodeJS 中的 promise 函数
- c++14 - std::stringstream: 寻求建议
- c# - 折叠数据网格中的详细信息行
- firebase - Firestore 更新有时会失败,并出现错误“错误:16 未经身份验证:请求具有无效的身份验证凭据。”