我有一个这样的数据框:
X <- data.frame(value = c(1,2,3,4),
variable = c("cost", "cost", "reed_cost", "reed_cost"))
我想将变量列一分为二;一列表示变量是否为“成本”,另一列表示变量是否为“reed”。我似乎无法为拆分找出正确的正则表达式(例如使用 tidyr)
如果我的数据更好,请说:
Y <- data.frame(value = c(1,2,3,4),
variable = c("adjusted_cost", "adjusted_cost", "reed_cost", "reed_cost"))
那么这对于 tidyr 来说是微不足道的:
separate(Y, variable, c("Type", "Model"), "_")
和宾果游戏。相反,看起来我需要某种条件语句来拆分“_”(如果存在),否则拆分在模式的开头(“^”)。
我试过了:
separate(X, variable, c("Policy-cost", "Reed"), "(?(_)_|^)", perl=TRUE)
但没有运气。我意识到我什至无法成功拆分为空字符串:
separate(X, variable, c("Policy-cost", "Reed"), "^", perl=TRUE)
我该怎么做?
编辑 请注意,这是一个更大问题的最小示例,其中有许多可能的变量(不仅仅是cost
and reed_cost
),所以我不想对每个变量进行字符串匹配。
我正在寻找一种解决方案,该解决方案可以按_
模式拆分任意变量(如果存在),否则将它们拆分为空白字符串和原始标签。
我也意识到我可以只是 grep 的存在,_
然后手动构建列。如果不那么优雅,那也没关系;似乎应该有一种方法可以使用可以返回空字符串的条件来拆分字符串...