选择字符串变量的第一个单词并在第一次出现时

时间:2018-01-31 17:39:52

标签: r regex

我正在尝试应用行选择,但需要使用字符串变量的第一个单词来完成。所以我可以选择该行的第一次出现。

我试过这样的话:(substr(aux$AIO[1], start =1, stop = 7)=="Neutral")

但是它只选择数据集的第一个主题的所有匹配项,而不是所有主题的第一个主题。

这基本上是数据和想法的工作原理:

ID  Attempt Type           Time
1   1       Neutral lotion 10
1   1       Acid lotion    15 
1   2       Neutral lotion  8
1   2       Sweet lotion   17
2   1       Neutral lotion 11
2   1       Acid lotion    13
2   2       Neutral lotion  9
2   2       Sweet lotion   15

我需要为每个ID和每个ID的每个试验选择中性条件的第一次出现,这样我就可以减去酸性和甜味条件下的中性条件下的时间消耗。

2 个答案:

答案 0 :(得分:0)

这应该可以帮助您入门。

test <- c('This is a test.', 'Neutral Density', 'Cool cucumber.')

library(stringr)

ans <- str_match(test, '^\\w+\\b')
ans
#     [,1]     
#[1,] "This"   
#[2,] "Neutral"
#[3,] "Cool"

which(ans[,1] == 'Neutral')
#[1] 2

答案 1 :(得分:0)

使用dplyr

library(dplyr)
df <- data.frame('ID' = c(1,1,1,1,2,2,2,2), 'Attempt' = c(1,1,2,2,1,1,2,2), 
                 'Type' = c('Neutral lotion', 'Acid lotion', 'Neutral lotion', 
                          'Sweet lotion', 'Neutral lotion', 'Acid lotion',
                          'Neutral lotion', 'Sweet lotion'),
                 'Time' = c(10, 15, 8, 17, 11, 13, 9, 15), stringsAsFactors = FALSE)

df %>%
  group_by(ID, Attempt) %>%
  slice(which(Type == 'Neutral lotion')[1])

哪个收益

# A tibble: 4 x 4
# Groups:   ID, Attempt [4]
     ID Attempt           Type  Time
  <dbl>   <dbl>          <chr> <dbl>
1     1       1 Neutral lotion    10
2     1       2 Neutral lotion     8
3     2       1 Neutral lotion    11
4     2       2 Neutral lotion     9