首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拆分camelCase列名

拆分camelCase列名
EN

Stack Overflow用户
提问于 2015-01-19 15:04:13
回答 1查看 321关注 0票数 6

我已经想了一段时间了,我想我应该在这里问一问。

假设我有如下所示的数据框架:

代码语言:javascript
复制
df <- data.frame(participant = 1:6, group = c("adult", "adult", "child", "child", "NSS", "NSS"), RegProto = c(2, 3, 4, 2, 4, 3), RegInt = c(2, 3, 4, 6, 6, 5), RegDistant = c(3, 3, 4, 5, 4, 5), IrregProto = c(4, 5, 3, 4, 3, 1), IrregInt = c(4, 4, 4, 4, 4, 4), IrregDistant = c(4, 5, 6, 8, 9, 1))

这个数据框架的问题是,每个变量都包含两个变量:一个变量的值为RegIrreg,另一个变量的值为ProtoIntDistant。我想要做的是拆分这些列并使表变长,最好使用tidyr。我以为我可以这样做。

代码语言:javascript
复制
library("tidyr")
df_long <- df %>%
gather(index, n, -group, -participant) %>%
select(participant, group, index, n) %>%
separate(index, into = c("verb", "similarity"), sep = "\\.?=\\p{Upper}")

这做我想做的直到separate()。我收到一条错误消息,表示这些值没有被拆分,但是没有其他关于为什么会被分割的建议。我刚开始使用regex,所以我怀疑问题一定存在,但我不知道正确的语法可能是什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-19 15:13:19

您可以使用这个regex:

代码语言:javascript
复制
(?<=.)(?=[A-Z])

这表示(零长度)位置,后面是大写字母,前面是任何字符。

命令:

代码语言:javascript
复制
library(dplyr)
df %>%
  gather(index, n, -group, -participant) %>%
  select(participant, group, index, n) %>%
  separate(index, into = c("verb", "similarity"), sep = "(?<=.)(?=[A-Z])")
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28027577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档