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

基于字符串的R数据帧的条件变异,r,dplyr,R,Dplyr,我正在使用R并尝试根据现有列中的字符串信息创建一个新列 我的数据如下: 我需要的结果是: 我知道我在代码中犯了好几个错误,但在花了整整一周的时间盯着代码和网络搜索之后,我无法得到我需要的结果。 我感谢你的帮助。 提前谢谢 Occupancy <- read_excel("Occupancy.xlsx") OccupancyMutated <- mutate(Occupancy, area_new = area) OccupancyMutated <- as.data.fram

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

我的数据如下:

我需要的结果是:

我知道我在代码中犯了好几个错误,但在花了整整一周的时间盯着代码和网络搜索之后,我无法得到我需要的结果。 我感谢你的帮助。 提前谢谢

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)

占用我们可以使用
stringr
进行此操作。函数
word
将提取
risk\u code
中每个字符串的第一个单词,函数
str\u to\u 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" 
这就是答案(多亏了Sotos):


谢谢你的回答。不幸的是,它并不总是第一个词。我将更改我的示例以使其更清楚。已编辑。请看一看并让我知道,因为您正在使用
tolower
,请确保您要查找的模式(在您的案例中
提取|离岸|陆上
)也用小写字母书写
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" 
Occupancy <- read_excel("Occupancy.xlsx")

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

OccupancyMutated$area_new[Occupancy$area == "--"] <- 
str_to_title(str_extract(tolower(Occupancy$risk_code), 'Extraction|Offshore|Onshore'))

View(OccupancyMutated)