Основная причина, по которой ваш цикл for не работает, заключается в том, что str_detect()
принимает только строки в качестве входных данных, но вы пытаетесь использовать его в столбце идентификатора в df2
, который является числовым вектором.Есть и другие проблемы с вашим циклом for: в частности, вы определяете объект x
, который фактически никогда не используется впоследствии, и поэтому ваш код не будет выбирать элементы, которые вы хотите использовать, используя str_detect()
.
* 1006.* Вот еще один вариант, если вы хотите больше
stringr
решения.Он не использует ни циклы for, ни
apply()
(по крайней мере, напрямую).
Он работает с использованием регулярных выражений для извлечения только числовых символов из столбца «SAMPLE.NAMES», чтобы связать каждый образец с его числовымЯ БЫ.После этого мы просто объединяем кадры данных и выбираем нужные вам столбцы:
# Example dataframes
df1 <- tibble(SAMPLE.NAMES = c("1_a", "1_b", "1_c", "2_a", "2_b", "3_a", "4_a", "4_b"))
df2 <- tibble(ID = c(1,2,3,4),
GROUP = c("X", "X", "Y", "Z"))
df1 <- mutate(df1, ID = as.numeric(str_replace_all(SAMPLE.NAMES, "_[abc]", ""))) %>%
left_join(df2) %>%
select(-ID)
# Output:
# A tibble: 8 x 2
SAMPLE.NAMES GROUP
<chr> <chr>
1 1_a X
2 1_b X
3 1_c X
4 2_a X
5 2_b X
6 3_a Y
7 4_a Z
8 4_b Z