我正在尝试做一件非常简单的事情。我有以下数据框:
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
我想做几件不同的事情。
如何选择“变量”列中以“C1”结尾的所有条目,并将这些条目替换为简单的“C1”,即替换“C1”前面的所有文本。对以“I2”、“J3”和“C4”结尾的条目执行相同的操作。
如何选择“变量”列中以“C1”结尾的所有条目,并仅使用此文本(“C1”)创建一个名为“variable2”的新列。对以“I2”、“J3”和“C4”结尾的条目执行相同的操作。
如果上一个问题已涵盖此问题,我提前表示歉意。非常感谢!
附注
最佳答案
您可以使用tidyverse
来做到这一点
1- 将 dplyr::mutate
与 gsub
结合使用
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/