R 仅使用另一列中的部分内容填充新列

R 仅使用另一列中的部分内容填充新列,r,R,在我的数据帧中有一个名为“ID”的列,它由示例名称组成,例如:C1、C2、C3、…C20、O1、…O20 现在,我想创建一个名为“治疗”的新专栏,我在其中填写“常规”一词,用于所有在“ID”和“Organic”中的数字前面有一个“C”的情况,其中在名称前面有一个“O” 范例 ID treatment C1 conventional C2 conventional O1 organic 我在这里发现了一个类似的问题,但他们使用了全部内容,而不是我需要的部分

在我的数据帧中有一个名为“ID”的列,它由示例名称组成,例如:C1、C2、C3、…C20、O1、…O20

现在,我想创建一个名为“治疗”的新专栏,我在其中填写“常规”一词,用于所有在“ID”和“Organic”中的数字前面有一个“C”的情况,其中在名称前面有一个“O”

范例

ID      treatment
C1      conventional
C2      conventional
O1      organic
我在这里发现了一个类似的问题,但他们使用了全部内容,而不是我需要的部分内容:

类似于

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

您也可以这样做:

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

df也尝试使用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')
  )

非常感谢您!!这成功了!实际上,我还有两个额外的ID:例如CG18和OG20,但一旦有了“g”,我就想在治疗中给它命名为“草地”。所以最后我有了“传统”、“有机”和“草地”。你知道我如何处理这个问题吗?你可以添加一个嵌套的ifelse来检查G,或者你可以运行第二个命令只检查G。最好使用
NA\u character\uu
而不是
'NA'
这正是我要找的。非常感谢“sorearm”@Moody_mudscappper:为什么它更好,我该如何编写代码呢。我应该在哪里添加这个函数?@Chu soil我想Moody_Mudskipper指的是我脚本中的TRUE ~'NA'部分,只使用TRUE ~'NA_character_'?不,不要使用简单的引号,只使用
TRUE~NA_character
:)我不确定是否可以在这里提出后续问题,但这是针对上述数据的。现在,我想添加一个额外的列,并用“AM”填充时间早于14.04的所有行,并用“PM”填充时间晚于14.04的所有行。我尝试了以下代码:df.HMR$time=ifelse(df.HMR$time你应该学习如何使用R中的日期和时间,这将是非常有益的,我保证,我建议你在package
lubridate
上查找一些教程,因为它让事情变得非常直观。这非常有用,我不知道。谢谢@Moody\u mudscapper