我试图做一件非常简单的事情。我有以下数据框:
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
我想做几件不同的事情。
如何选择&#39;变量&#39;中的所有条目?以&#39; C1结尾的列,并用简单的&#39; C1&#39;替换这些条目,即替换&#39; C1&#39;前面的所有文本。并对结束&#39; I2&#39;,&#39; J3&#39;和&#39; C4&#39;
如何选择&#39;变量&#39;中的所有条目?以&#39; C1&#39;结尾的列并创建一个名为&#39; variable2&#39;的新列。只有这个文字(&#39; C1&#39;)。并对那些以&#39; I2&#39;,&#39; J3&#39;和&#39; C4&#39;结尾的条目执行相同的操作。
如果之前的问题已经涵盖了这一点,我会提前道歉。非常感谢!
PS
答案 0 :(得分:2)
您可以使用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