如果/否则如果在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)

您将无法运行此版本,因为回车和空格阻碍了正则表达式引擎进程。


以上是如果/否则如果在R中的文本列上的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>