基于字符串的R数据帧的条件突变

时间:2019-09-03 12:05:30

标签: r dplyr

我正在使用R,并尝试根据现有列中的字符串信息创建一个新列。

我的数据就像:

risk_code          |  area
-----------------------------------
DEEP DIGGING ALL   |  --
CONSTRUCTION PRO   |  Construction
CLAIMS ONSHORE     |  --
OFFSHORE CLAIMS    |  --

我需要的结果是:

risk_code          |  area          |  area_new
-------------------------------------------------
DEEP DIGGING ALL   |  --            |  Digging
CONSTRUCTION PRO   |  Construction  |  Construction
CLAIMS ONSHORE     |  --            |  Onshore
OFFSHORE CLAIMS    |  --            |  Offshore

我了解我在代码中犯了一些错误,但是在盯着它看了整整一周并进行互联网搜索之后,我无法获得所需的结果。 我感谢您的帮助。 预先感谢。

Occupancy <- read_excel("Occupancy.xlsx")

OccupancyMutated <- mutate(Occupancy, area_new = area)
OccupancyMutated <- as.data.frame(OccupancyMutated)

OccupancyMutated$area_new[Occupancy$area == "--"] <- 
{ 
  if (OccupancyMutated$risk_code == %Digging%) {"Digging"}
else if (OccupancyMutated$risk_code == %ONSHORE%) {"Onshore"}
else if (OccupancyMutated$risk_code == %OFFSHORE%) {"Offshore"}
  else {"empty"}
}
View(OccupancyMutated)

2 个答案:

答案 0 :(得分:1)

我们可以使用stringr进行此操作。函数word将提取risk_code中每个字符串的第一个单词,而函数str_to_title将转换为您所需的格式。这两个函数都被简单地矢量化了,

library(stringr)

str_to_title(word(df$risk_code, 1, 1))
#[1] "Digging"      "Construction" "Onshore"      "Offshore" 

如果并非总是第一个单词,而只需要针对特定​​单词,则可以这样做,

str_to_title(str_extract(tolower(df$risk_code), 'digging|offshore|onshore'))
#[1] "Digging"  NA         "Onshore"  "Offshore" 

答案 1 :(得分:1)

所以,这就是答案(感谢Sotos):

f . (g x) = f (g x)