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

时间:2017-04-06 23:06:40

标签: 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. 如何选择&#39;变量&#39;中的所有条目?以&#39; C1结尾的列,并用简单的&#39; C1&#39;替换这些条目,即替换&#39; C1&#39;前面的所有文本。并对结束&#39; I2&#39;,&#39; J3&#39;和&#39; C4&#39;

  2. 的条目执行相同的操作。
  3. 如何选择&#39;变量&#39;中的所有条目?以&#39; C1&#39;结尾的列并创建一个名为&#39; variable2&#39;的新列。只有这个文字(&#39; C1&#39;)。并对那些以&#39; I2&#39;,&#39; J3&#39;和&#39; C4&#39;结尾的条目执行相同的操作。

  4. 如果之前的问题已经涵盖了这一点,我会提前道歉。非常感谢!

    PS

1 个答案:

答案 0 :(得分:2)

您可以使用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