如果/否则如果在R中的文本列上
我是 R 的新手,需要以下方面的帮助。
| 有 | 需要 |
|---|---|
| 男_18_24_pn | 18_24 |
| 男_25_39_pn | 25_39 |
| 男_40_64_pn | 40_64 |
| 男_65_84_pn | 65_84 |
| 男_85_plus_pn | 85_plus |
| 女_18_24_pn | 18_24 |
回答
你可以做:
require(data.table)
dt = data.table(
have = c("Male_18_24_pn", "Male_25_39_pn",
"Male_40_64_pn", "Male_65_84_pn",
"Male_85_plus_pn", "Female_18_24_pn")
)
dt[ , need := gsub('(Male|Female)_(.+)(_pn)', '2', have) ]
基础 R 解决方案:
dt$need = gsub('(Male|Female)_(.+)(_pn)', '2', dt$have)
不需要循环或任何条件语句。您可以借助矢量化函数(例如gsub()和一个简单的正则表达式)提取所需的信息。
[志愿者编辑] 这是试图解释该替换模式的正则表达式逻辑(请参阅?regex有关非常简洁但完整的描述)。您需要了解捕获类可以做什么。
gsub('(Male|Female)#This matches "Male" or "Female", the first "capture classes"
_(.+)# Second capture class, matching anything after an underscore
(_pn)',# ... up to but not including an "_pn"
'2', # replace anything matched with only the second capture class
dt$have)
您将无法运行此版本,因为回车和空格阻碍了正则表达式引擎进程。