拆分驼峰式列名
Split camelCase Column names
我想弄清楚这个问题已经有一段时间了,想在这里问一下。
假设我有一个如下所示的数据框:
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))
这个数据框的问题在于每个数据框都包含两个变量:一个变量的值为 Reg
或 Irreg
,另一个变量的值为 Proto
、Int
,或Distant
。我想做的是拆分这些列并使 table 变长,最好使用 tidyr
。我以为我可以这样做。
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()
之前,这就是我想要的。我收到一条错误消息,指出这些值未拆分,但没有其他关于为什么会这样的建议。我是正则表达式的新手,所以我怀疑问题一定在那里,但我不知道正确的语法是什么。
您可以使用这个正则表达式:
(?<=.)(?=[A-Z])
这表示(零长度)位置后跟一个大写字母,前面是任何字符。
命令:
library(dplyr)
df %>%
gather(index, n, -group, -participant) %>%
select(participant, group, index, n) %>%
separate(index, into = c("verb", "similarity"), sep = "(?<=.)(?=[A-Z])")
我想弄清楚这个问题已经有一段时间了,想在这里问一下。
假设我有一个如下所示的数据框:
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))
这个数据框的问题在于每个数据框都包含两个变量:一个变量的值为 Reg
或 Irreg
,另一个变量的值为 Proto
、Int
,或Distant
。我想做的是拆分这些列并使 table 变长,最好使用 tidyr
。我以为我可以这样做。
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()
之前,这就是我想要的。我收到一条错误消息,指出这些值未拆分,但没有其他关于为什么会这样的建议。我是正则表达式的新手,所以我怀疑问题一定在那里,但我不知道正确的语法是什么。
您可以使用这个正则表达式:
(?<=.)(?=[A-Z])
这表示(零长度)位置后跟一个大写字母,前面是任何字符。
命令:
library(dplyr)
df %>%
gather(index, n, -group, -participant) %>%
select(participant, group, index, n) %>%
separate(index, into = c("verb", "similarity"), sep = "(?<=.)(?=[A-Z])")