如何仅将字符串添加到 R 中字符列的子集
How to add a string only to a subset of a character column in R
我有一个类似于下面的数据框:
# A tibble: 32 × 3
sample IP value
<chr> <chr> <dbl>
1 prot1 -IP 0
2 prot1 Mock 0
3 prot2 -IP 0
4 prot2 Mock 0
5 prot3 -IP 0
6 prot3 Mock 0
# … with 22 more rows
我只想在 IP
列中包含行的 -IP
前面添加一个由变量 (a <- ("str")
) 指定的字符串,获得如下内容:
# A tibble: 32 × 3
sample IP value
<chr> <chr> <dbl>
1 prot1 str-IP 0
2 prot1 Mock 0
3 prot2 str-IP 0
4 prot2 Mock 0
5 prot3 str-IP 0
6 prot3 Mock 0
# … with 22 more rows
我想我们可以使用 paste
和 filter
的组合,但我想保留整个数据集。
为了获得精确的解决方案,我们可以在此处使用sub
:
df$IP <- sub("-IP", paste0(a, "-IP"), df$IP, fixed=TRUE)
另一种选择,使用 ifelse
和 grepl
:
df$IP <- ifelse(grepl("^-IP$", df$IP, fixed=TRUE), paste0(a, "-IP"), df$IP)
我有一个类似于下面的数据框:
# A tibble: 32 × 3
sample IP value
<chr> <chr> <dbl>
1 prot1 -IP 0
2 prot1 Mock 0
3 prot2 -IP 0
4 prot2 Mock 0
5 prot3 -IP 0
6 prot3 Mock 0
# … with 22 more rows
我只想在 IP
列中包含行的 -IP
前面添加一个由变量 (a <- ("str")
) 指定的字符串,获得如下内容:
# A tibble: 32 × 3
sample IP value
<chr> <chr> <dbl>
1 prot1 str-IP 0
2 prot1 Mock 0
3 prot2 str-IP 0
4 prot2 Mock 0
5 prot3 str-IP 0
6 prot3 Mock 0
# … with 22 more rows
我想我们可以使用 paste
和 filter
的组合,但我想保留整个数据集。
为了获得精确的解决方案,我们可以在此处使用sub
:
df$IP <- sub("-IP", paste0(a, "-IP"), df$IP, fixed=TRUE)
另一种选择,使用 ifelse
和 grepl
:
df$IP <- ifelse(grepl("^-IP$", df$IP, fixed=TRUE), paste0(a, "-IP"), df$IP)