如何仅通过拆分器字符串的第一个值来重命名数据框列

时间:2017-03-29 09:49:37

标签: r dataframe tidyverse

我有以下数据框:

df <- structure(list(n.foldchange = c(2, 3, 5), s.foldchange = c(4, 
0.2, 100.3)), .Names = c("n.foldchange", "s.foldchange"), row.names = c(NA, 
-3L), class = "data.frame")

看起来像这样:

  n.foldchange s.foldchange
1            2          4.0
2            3          0.2
3            5        100.3

我想要做的是通过删除.之后的值来重命名该列。 屈服

             n            s
1            2          4.0
2            3          0.2
3            5        100.3

我该怎么做? (可能tidyverse?)

3 个答案:

答案 0 :(得分:2)

我们可以使用names setnames重命名dplyr列。

library(dplyr)
df %>%
 setnames(sub("\\..*", "", names(.)))

df

#  n     s
#1 2   4.0
#2 3   0.2
#3 5 100.3

答案 1 :(得分:1)

我们可以使用sub执行此操作以匹配.(转义.\\.)以获取.的字面含义,因为它是一个元字符,表示任何字符)后跟其他字符(.*)并用空格替换

names(df) <- sub("\\..*", "", names(df))

或使用substringsubstr

names(df) <- substring(names(df), 1,1)

答案 2 :(得分:1)

另一种解决方案使用基本R函数substringregexpr

names(df) <- substring(names(df), 1, regexpr(".", names(df), fixed=TRUE)-1)

df
  n     s
1 2   4.0
2 3   0.2
3 5 100.3

此处,regexpr用于标识变量名中第一个点的位置。这个位置(减1)被赋予substring,它返回原始变量名的子串,从第一个字符开始,到第一个点之前结束。