【问题标题】:R Creating a new variable name by partially matching other variable namesR通过部分匹配其他变量名来创建新变量名
【发布时间】:2017-03-28 21:41:28
【问题描述】:

如果任何其他变量名称中存在aA,我想使用以下示例创建一个新变量x

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

【问题讨论】:

  • 试试if (grep("a|A", colnames(names1))) names1$x<-31

标签: r string-matching


【解决方案1】:

我们可以使用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 是如何不相加的。

希望这就是你所追求的!

【讨论】:

  • 谢谢 有没有办法完全避免输入不同情况的每个可能变化以获得相同的结果?我有数百个带有字符串名称的变量,我必须将其中的 5-10 个包含某种形式的单个单词(例如,单词可以出现在不同的地方,大小写等)组合成一个单变量。我知道我必须指定任何替代拼写,但我希望至少不必指定大写或小写的每个排列。非常感谢。
  • 我也有很多丢失的数据,当我使用上面的编码时,这似乎会导致 NA。
  • Hrmm,我认为您最好的选择是发布一个新问题,但包含更大的数据块 - 确保您包含一个其中也缺少数据的块。如果无法查看您的数据、您想要使用的变量以及您的预期输出,那么很难提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-14
  • 1970-01-01
  • 1970-01-01
  • 2014-12-25
  • 2014-09-29
  • 2015-08-17
  • 1970-01-01
相关资源
最近更新 更多