R - 在数据框列中搜索文本字符串并替换内容/创建新列

标签 r

我正在尝试做一件非常简单的事情。我有以下数据框:

df <- data.frame(ID=c("ID1", "ID2", "ID3", "ID4","ID5", "ID6", "ID7", "ID8"),
             variable=c("XXX.C1", "XXY.I2", "XXZ.J3", "XYZ.C4", "YXX.C1", "XZX.I2", "XYX.J3", "XXA.C4"))

给出数据框:

ID variable
1 ID1   XXX.C1
2 ID2   XXY.I2
3 ID3   XXZ.J3
4 ID4   XYZ.C4
5 ID5   YXX.C1
6 ID6   XZX.I2
7 ID7   XYX.J3
8 ID8   XXA.C4

我想做几件不同的事情。

  1. 如何选择“变量”列中以“C1”结尾的所有条目,并将这些条目替换为简单的“C1”,即替换“C1”前面的所有文本。对以“I2”、“J3”和“C4”结尾的条目执行相同的操作。

  2. 如何选择“变量”列中以“C1”结尾的所有条目,并仅使用此文本(“C1”)创建一个名为“variable2”的新列。对以“I2”、“J3”和“C4”结尾的条目执行相同的操作。

如果上一个问题已涵盖此问题,我提前表示歉意。非常感谢!

附注

最佳答案

您可以使用tidyverse来做到这一点

1- 将 dplyr::mutategsub 结合使用

library(tidyverse)
df %>% 
  mutate(variable=gsub(x=variable, ".*(C.)", "\\1"))

   ID variable
1 ID1       C1
2 ID2       C2
3 ID3       C3
4 ID4       C4
5 ID5       C1
6 ID6       C2
7 ID7       C3
8 ID8       C4

2- 使用 tidyr::spread 计算 (1) 的结果

df %>% 
  mutate(variable=gsub(x=variable, ".*(C.)", "\\1")) %>%
  spread(key = variable, value = variable)

   ID   C1   C2   C3   C4
1 ID1   C1 <NA> <NA> <NA>
2 ID2 <NA>   C2 <NA> <NA>
3 ID3 <NA> <NA>   C3 <NA>
4 ID4 <NA> <NA> <NA>   C4
5 ID5   C1 <NA> <NA> <NA>
6 ID6 <NA>   C2 <NA> <NA>
7 ID7 <NA> <NA>   C3 <NA>
8 ID8 <NA> <NA> <NA>   C4

关于R - 在数据框列中搜索文本字符串并替换内容/创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43267126/

相关文章:

R:facet_wrap 无法在 Shiny 应用程序中使用 ggplotly 正确呈现

删除图例 ggplot 2.2

r - 查找两个向量之间的序列[间隙或差异]

r - 如何使用解析的变量打印函数体

dplyr mutate 中的递归错误

R赋值运算符

r - dplyr mutate stringr str_detect 具有多个条件参数和相应的输出

r - 在 redHat CentOs 7 上安装 R。几个错误和依赖项我无法克服

r - 更改具有两个条件的面板标签

c++ - 'builtin' [Rcpp] 中未实现的类型 'coerceToReal'