在 R 中,如何向列名添加一串文本?
In R, how do I add a string of text to column names?
我想在我的数据框中的列名末尾添加一串文本。我该怎么做?
示例数据(我想将列名称 A
、B
、C
、D
、E
更改为 Atext
, Btext
, Ctext
, Dtext
, Etext
):
df <- structure(list(User_ID = 1:4, A = c(0.815353067, 0.698314902, 0.774619233, 0.949620322),
B = c(0.684046246, 0.427028078, 0.579449798, 0.977426626),
C = c(0.101562005, 0.943064479, 0.19946195, 0.70068721),
D = c(0.525384365, 0.638082727, 0.651924335, 0.112375646),
E = c(0.415664129, 0.006406548, 0.85036104, 0.510504667)),
class = "data.frame", row.names = c(NA, -4L))
使用 grep
查找字母名称列,使用 paste
将字符串 text
连接到末尾:
names.change <- grep("^[A-Z]+$", names(df))
names(df)[names.change] <- paste0(names(df)[names.change], "text")
df
User_ID Atext Btext Ctext Dtext Etext
1 1 0.8153531 0.6840462 0.1015620 0.5253844 0.415664129
2 2 0.6983149 0.4270281 0.9430645 0.6380827 0.006406548
3 3 0.7746192 0.5794498 0.1994619 0.6519243 0.850361040
4 4 0.9496203 0.9774266 0.7006872 0.1123756 0.510504667
我更喜欢与 dplyr::rename_with
:
的单行
library(dplyr)
df %>% rename_with(~paste0(., "Text"), grep("^[A-Z]$", names(.)))
输出:
User_ID AText BText CText DText EText
1 1 0.8153531 0.6840462 0.1015620 0.5253844 0.415664129
2 2 0.6983149 0.4270281 0.9430645 0.6380827 0.006406548
3 3 0.7746192 0.5794498 0.1994619 0.6519243 0.850361040
4 4 0.9496203 0.9774266 0.7006872 0.1123756 0.510504667
这是没有 grepl
的基础 R 解决方案:
colnames(df)[-1] <- paste0(colnames(df)[-1], "text")
输出:
User_ID Atext Btext Ctext Dtext Etext
1 1 0.8153531 0.6840462 0.1015620 0.5253844 0.415664129
2 2 0.6983149 0.4270281 0.9430645 0.6380827 0.006406548
3 3 0.7746192 0.5794498 0.1994619 0.6519243 0.850361040
4 4 0.9496203 0.9774266 0.7006872 0.1123756 0.510504667
我也会使用 rename_with
。但我认为我们可以使用 .cols
参数,因此我们可以在调用 rename_with
之前包含一个选择助手,从而避免需要 grep
.
df %>% rename_with(.cols=matches('[A-E]'), ~paste0(.x, 'text'))
如果选择的列始终是A-Z,选择可以更简单:
df %>% rename_with(~paste0(.x, 'text'), A:E)
输出
User_ID Atext Btext Ctext Dtext Etext
1 1 0.8153531 0.6840462 0.1015620 0.5253844 0.415664129
2 2 0.6983149 0.4270281 0.9430645 0.6380827 0.006406548
3 3 0.7746192 0.5794498 0.1994619 0.6519243 0.850361040
4 4 0.9496203 0.9774266 0.7006872 0.1123756 0.510504667
我想在我的数据框中的列名末尾添加一串文本。我该怎么做?
示例数据(我想将列名称 A
、B
、C
、D
、E
更改为 Atext
, Btext
, Ctext
, Dtext
, Etext
):
df <- structure(list(User_ID = 1:4, A = c(0.815353067, 0.698314902, 0.774619233, 0.949620322),
B = c(0.684046246, 0.427028078, 0.579449798, 0.977426626),
C = c(0.101562005, 0.943064479, 0.19946195, 0.70068721),
D = c(0.525384365, 0.638082727, 0.651924335, 0.112375646),
E = c(0.415664129, 0.006406548, 0.85036104, 0.510504667)),
class = "data.frame", row.names = c(NA, -4L))
使用 grep
查找字母名称列,使用 paste
将字符串 text
连接到末尾:
names.change <- grep("^[A-Z]+$", names(df))
names(df)[names.change] <- paste0(names(df)[names.change], "text")
df
User_ID Atext Btext Ctext Dtext Etext
1 1 0.8153531 0.6840462 0.1015620 0.5253844 0.415664129
2 2 0.6983149 0.4270281 0.9430645 0.6380827 0.006406548
3 3 0.7746192 0.5794498 0.1994619 0.6519243 0.850361040
4 4 0.9496203 0.9774266 0.7006872 0.1123756 0.510504667
我更喜欢与 dplyr::rename_with
:
library(dplyr)
df %>% rename_with(~paste0(., "Text"), grep("^[A-Z]$", names(.)))
输出:
User_ID AText BText CText DText EText
1 1 0.8153531 0.6840462 0.1015620 0.5253844 0.415664129
2 2 0.6983149 0.4270281 0.9430645 0.6380827 0.006406548
3 3 0.7746192 0.5794498 0.1994619 0.6519243 0.850361040
4 4 0.9496203 0.9774266 0.7006872 0.1123756 0.510504667
这是没有 grepl
的基础 R 解决方案:
colnames(df)[-1] <- paste0(colnames(df)[-1], "text")
输出:
User_ID Atext Btext Ctext Dtext Etext
1 1 0.8153531 0.6840462 0.1015620 0.5253844 0.415664129
2 2 0.6983149 0.4270281 0.9430645 0.6380827 0.006406548
3 3 0.7746192 0.5794498 0.1994619 0.6519243 0.850361040
4 4 0.9496203 0.9774266 0.7006872 0.1123756 0.510504667
我也会使用 rename_with
。但我认为我们可以使用 .cols
参数,因此我们可以在调用 rename_with
之前包含一个选择助手,从而避免需要 grep
.
df %>% rename_with(.cols=matches('[A-E]'), ~paste0(.x, 'text'))
如果选择的列始终是A-Z,选择可以更简单:
df %>% rename_with(~paste0(.x, 'text'), A:E)
输出
User_ID Atext Btext Ctext Dtext Etext
1 1 0.8153531 0.6840462 0.1015620 0.5253844 0.415664129
2 2 0.6983149 0.4270281 0.9430645 0.6380827 0.006406548
3 3 0.7746192 0.5794498 0.1994619 0.6519243 0.850361040
4 4 0.9496203 0.9774266 0.7006872 0.1123756 0.510504667