R通过部分匹配其他变量名来创建新变量名

时间:2017-03-28 21:41:29

标签: r string-matching

如果任何其他变量名中有xa,我想创建一个新变量A,其中包含以下示例:

structure(list(A = 10L, a = 20L, abc = 1L), .Names = c("A", "a", "abc"), 
class = "data.frame", row.names = c(NA, -1L))

结果应如下所示:

structure(list(A = 10L, a = 20L, abc = 1L, x = 31L), .Names = c("A", "a", 
"abc", "x"), class = "data.frame", row.names = c(NA, -1L))

我试图通过以下方式实现这一目标:

names1$x[grep("a" | "A", colnames(names1))]

导致以下错误:

  

"错误" a" | " A" :只能对数字,逻辑或复杂类型进行操作"

我还尝试仅匹配a,但这导致NULL

1 个答案:

答案 0 :(得分:0)

我们可以使用whichgrepl来获取与" A | a"匹配的索引。要求。

在我的代码中,我添加了元素b,只是为了表明b未被总结。我已将您的代码复制而已。

input <- structure(list(A = 10L, a = 20L, abc = 1L, b = 3L), .Names = c("A", "a", "abc", "b"), class = "data.frame", row.names = c(NA, -1L))

> input
   A  a abc b
1 10 20   1 3

然后我们可以这样做:

input$x <- sum(input[which(grepl("a|A",names(input)))])

> input
   A  a abc b  x
1 10 20   1 3 31

请注意b未总结的结果。

希望这就是你所追求的!