Заполнить новый столбец, используя только часть содержимого в другом столбце - PullRequest
0 голосов
/ 11 октября 2018

У меня есть столбец с именем "ID" в моем фрейме данных, который состоит из имен примеров, таких как: C1, C2, C3, ... C20, O1, ..., O20.

Теперь я хотел быхотел бы создать новый столбец под названием «обработка», где я заполняю слово «Обычный» для всех случаев, когда перед числом в «ID» и «Органическом» был знак «С», где перед «О»имя.

Пример

ID      treatment
C1      conventional
C2      conventional
O1      organic

Я нашел подобный вопрос здесь, но там они использовали весь контент, а не только часть контента, как мне нужно: Агрегировать данные водин столбец на основе значений в другом столбце

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

Вы также можете сделать это следующим образом:

df <- data.frame(ID = c("C1","C2","O1"))
lkp <- c(C = 'conventional', O = 'organic')
# or to answer your comment on other answer :
# lkp <- c(C = 'conventional', O = 'organic', CG = 'grassland', OG = 'grassland')
df$treatment <- lkp[gsub("\\d.*","",df$ID)]
df
#   ID    treatment
# 1 C1 conventional
# 2 C2 conventional
# 3 O1      organic
0 голосов
/ 11 октября 2018

Попробуйте также использовать номенклатуру Tidyverse, там есть несколько очень мощных и простых в исполнении команд, и вы не падаете в ловушку проблем if_else, из-за которых вы легко можете потеряться;

ID <- c('C1', 'C2', 'O1', 'CG18', 'OG20')
dat <- data.frame(ID)

require(tidyverse)

# use 'case_when' from dplyr and 'stringr' commands
dat <- dat %>% 
  mutate(
    treatment = case_when(

      # regex anchors 'C' at beginning followed by digits
      str_detect(ID, '^C\\d+') ~ 'conventional'  

      # regex anchors 'O' at beginning followed by digits
      , str_detect(ID, '^O\\d+') ~ 'organic'

      # regex to detect 'G'
      , str_detect(ID, 'G') ~ 'grassland'
      , TRUE ~ 'NA')
  )

should give you this

0 голосов
/ 11 октября 2018

Что-то вроде

mydf$treatment=ifelse(substr(mydf$ID,1,1)=="C","Conventional","Organic")

?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...