簡體   English   中英

基於來自其他列的特定字符的新數據集列(在 R 中)

[英]A new dataset column based on the specific characters from other columns (in R)

在我的數據集中,我想創建一個新列,該列以來自其他兩列的字符為條件。 如果longDescriptions.desc.en_US 中有一個單詞Plage並且同時externalCode以數字1開頭,則在新列中添加值A。 如果longDescriptions.desc.en_US中沒有單詞Plage並且同時externalCode以數字1開頭,則在新列中添加值B。 否則,將其留空或不適用。

df <- structure(list(X.OPERATOR. = c(" Clear and Delete", NA, NA, NA, 
NA, "<p>Je voornaamste taken:</p>"), externalCode = c("Job Profile.GUID", 
"1008141", "1008168", "1008170", "1008170", NA), longDesciptions.sectionId = c("sectionId", 
"199624017", "200226564", "200226592", "200226594", NA), longDesciptions.sectionType = c("sectionType", 
"LONGDESCRIPTION", "LONGDESCRIPTION", "LONGDESCRIPTION", "LONGDESCRIPTION", 
NA), longDesciptions.desc.en_US = c("US English", "Class: 06, Plage: C, Function code:", 
"Class: 03", "Class: 03", "<p>Als Legal Counsel maak je deel uit van het departement Secretariaat-Generaal. Je ondersteunt zowel de secretaris-generaal en de directie alsook de verschillende entiteiten van Elia groep, zowel op nationaal als internationaal niveau.</p>", 
NA), longDesciptions.desc.defaultValue = c("Default Value", "Class: 06, Plage: C, Function code:", 
"Class: 03", "Class: 03", NA, NA), longDesciptions.desc.en_GB = c("English (United Kingdom)", 
"Class: 06, Plage: C, Function code:", "Class: 03", "Class: 03", 
NA, NA), longDesciptions.desc.de_DE = c("German (Germany)", NA, 
NA, NA, NA, NA), longDesciptions.desc.fr_FR = c("French (France)", 
"Classe: 06, Plage: C, Code de la fonction:", "Classe: 03", "Classe: 03", 
NA, NA), longDesciptions.desc.nl_NL = c("Dutch (Netherlands)", 
"Klasse: 06, Plage: C, Functiecode:", "Klasse: 03", "Klasse: 03", 
NA, NA), longDesciptions.status = c("status(Valid Values : A/I   A for Active  I for Inactive  )", 
"A", "A", "A", NA, NA), longDesciptions.externalCode = c("externalCode", 
"1035137", "1035330", "1035330", NA, NA), longDesciptions.subModule = c("subModule", 
NA, NA, NA, NA, NA), NA. = c(NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_), NA..1 = c(NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_
), NA..2 = c(NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_), NA..3 = c(NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_), 
    NA..4 = c(NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_), NA..5 = c(NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_
    ), NA..6 = c(NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_), NA..7 = c(NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_), NA..8 = c(NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_), NA..9 = c(NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_), NA..10 = c(NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_
    ), NA..11 = c(NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_), NA..12 = c(NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_), NA..13 = c(NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_
    ), NA..14 = c(NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_), NA..15 = c(NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_), NA..16 = c(NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_
    ), NA..17 = c(NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_), NA..18 = c(NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_), NA..19 = c(NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_
    ), NA..20 = c(NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_), NA..21 = c(NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_), NA..22 = c(NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_
    ), NA..23 = c(NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_), NA..24 = c(NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_), NA..25 = c(NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_
    ), NA..26 = c(NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_), NA..27 = c(NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_), NA..28 = c(NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_
    ), NA..29 = c(NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_), NA..30 = c(NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_), NA..31 = c(NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_
    ), NA..32 = c(NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_), NA..33 = c(NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_), NA..34 = c(NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_
    )), class = "data.frame", row.names = c(NA, -6L))

我試過這段代碼,但它不起作用:

df2[,49] <- NA #
names(df2)[49] <- "JobDescrip" 

for (i in 1 : nrow(df2)) {
  if (df2$externalCode[i] == '^1' && df2$longDesciptions.sectionId[i]==
      '^P') {
    df2[i,49] <- "A"
  } 
  if (df2$externalCode[i] == '^1') {
    df2[i,49] <- "B"
  } 
  else {
    df2[i,49] <- ""
  }
}

Error in if (df2$externalCode[i] == "^1" && df2$longDesciptions.sectionId[i] ==  : 
  missing value where TRUE/FALSE needed

我知道此類問題已被問過很多次,但我找不到適合我的數據的解決方案。 任何幫助,將不勝感激!

這是您可以考慮的tidyverse方法。 我會考慮其他矢量化方法而不是循環。

在這種情況下,您可以使用dplyr mutate添加新列,並使用case_when代替多個if語句來添加邏輯。 如果第一個評估為假,則測試第二個評估,依此類推。

如果您使用grepl您可以檢查字符串是否包含“Plage”(您可以考慮其他正則表達式模式的替代方案)。 使用substr可以查看字符串中的特定字符。

library(dplyr)

df %>%
  mutate(job_descrip = case_when(
    grepl("Plage", longDesciptions.desc.en_US) & substr(externalCode, 1, 1) == "1" ~ "A",
    substr(externalCode, 1, 1) == "1" ~ "B",
    TRUE ~ NA_character_
  ))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM