R重命名数据帧列表中的列
我需要重命名数据帧列表中的一列。新列名需要反映它所属的数据帧的名称。例如,我想将字母列分别重命名为“1”和“2”(字母_1和字母_2),或者simliar也可以使用 这是一个可复制的例子R重命名数据帧列表中的列,r,list,dataframe,R,List,Dataframe,我需要重命名数据帧列表中的一列。新列名需要反映它所属的数据帧的名称。例如,我想将字母列分别重命名为“1”和“2”(字母_1和字母_2),或者simliar也可以使用 这是一个可复制的例子 #Create a list containing dataframes datasets=list() Numbers <- c(1,2,3,4) Letters <- c("A","B","C","D") DF1 <- data.frame(Numbers, Letters) Numbe
#Create a list containing dataframes
datasets=list()
Numbers <- c(1,2,3,4)
Letters <- c("A","B","C","D")
DF1 <- data.frame(Numbers, Letters)
Numbers <- c(1,9,3,14)
Letters <- c("A","Z","C","X")
DF2 <- data.frame(Numbers, Letters)
datasets[[1]] <- DF1
datasets[[2]] <- DF2
head(datasets[])
我的期望输出如下
[[1]]
Numbers 1
1 1 A
2 2 B
3 3 C
4 4 D
[[2]]
Numbers 2
1 1 A
2 9 Z
3 3 C
4 14 X
下面是我使用for循环的尝试
# Rename column using for loop
list <- c(1,2)
for (name in list){
colnames(datasets[[print(paste(`name`, sep=""))]][2]) <- c(print(paste(`name`, sep="")))
}
#使用for循环重命名列
list我们可以循环遍历每个list元素,并使用setNames
datasets[] <- lapply(seq_along(datasets), function(x)
setNames(datasets[[x]],
replace(names(datasets[[x]]), names(datasets[[x]]) == "Letters", x)))
datasets
#[[1]]
# Numbers 1
#1 1 A
#2 2 B
#3 3 C
#4 4 D
#[[2]]
# Numbers 2
#1 1 A
#2 9 Z
#3 3 C
#4 14 X
datasets[]我们可以循环遍历每个列表元素,并使用setNames
datasets[] <- lapply(seq_along(datasets), function(x)
setNames(datasets[[x]],
replace(names(datasets[[x]]), names(datasets[[x]]) == "Letters", x)))
datasets
#[[1]]
# Numbers 1
#1 1 A
#2 2 B
#3 3 C
#4 4 D
#[[2]]
# Numbers 2
#1 1 A
#2 9 Z
#3 3 C
#4 14 X
datasets[]您可以定义数据集元素的名称,然后在循环中访问它们:
names(datasets) <- c("DF1","DF2")
for (i in 1:length(datasets))
{
print(names(datasets)[i])
}
[1] "DF1"
[1] "DF2"
名称(数据集)您可以为数据集元素定义名称,然后在循环中访问它们:
names(datasets) <- c("DF1","DF2")
for (i in 1:length(datasets))
{
print(names(datasets)[i])
}
[1] "DF1"
[1] "DF2"
名称(数据集)只需稍加修改即可使用for循环解决方案
for(x in seq_along(datasets))
names(datasets[[x]])[names(datasets[[x]]) == 'Letters'] <- x
datasets
# [[1]]
# Numbers 1
# 1 1 A
# 2 2 B
# 3 3 C
# 4 4 D
#
# [[2]]
# Numbers 2
# 1 1 A
# 2 9 Z
# 3 3 C
# 4 14 X
用于(数据集中的x)
名称(数据集[[x]])[名称(数据集[[x]])==='Letters']只需稍加修改即可使用for循环解决方案
for(x in seq_along(datasets))
names(datasets[[x]])[names(datasets[[x]]) == 'Letters'] <- x
datasets
# [[1]]
# Numbers 1
# 1 1 A
# 2 2 B
# 3 3 C
# 4 4 D
#
# [[2]]
# Numbers 2
# 1 1 A
# 2 9 Z
# 3 3 C
# 4 14 X
用于(数据集中的x)
名称(数据集[[x]])[名称(数据集[[x]])=='Letters']如果您为列表命名,并且只希望在字母
列中添加data.frame名称,则这将起作用:
> Numbers <- c(1,2,3,4)
> Letters <- c("A","B","C","D")
> DF1 <- data.frame(Numbers, Letters)
> Numbers <- c(1,9,3,14)
> Letters <- c("A","Z","C","X")
> DF2 <- data.frame(Numbers, Letters)
>
> datasets <- list(
+ DF1 = DF1,
+ DF2 = DF2
+ )
>
> datasets <- sapply(names(datasets), function(x) {
+ df <- datasets[[x]]
+ i <- which(colnames(df) == "Letters")
+ colnames(df)[i] <- paste0("Letters_", x)
+ df
+ }, simplify = FALSE)
>
> datasets
$DF1
Numbers Letters_DF1
1 1 A
2 2 B
3 3 C
4 4 D
$DF2
Numbers Letters_DF2
1 1 A
2 9 Z
3 3 C
4 14 X
>数字字母DF1数字字母DF2
>数据集
>数据集如果您为列表命名,并且只想在字母
列中添加data.frame名称,那么这将起作用:
> Numbers <- c(1,2,3,4)
> Letters <- c("A","B","C","D")
> DF1 <- data.frame(Numbers, Letters)
> Numbers <- c(1,9,3,14)
> Letters <- c("A","Z","C","X")
> DF2 <- data.frame(Numbers, Letters)
>
> datasets <- list(
+ DF1 = DF1,
+ DF2 = DF2
+ )
>
> datasets <- sapply(names(datasets), function(x) {
+ df <- datasets[[x]]
+ i <- which(colnames(df) == "Letters")
+ colnames(df)[i] <- paste0("Letters_", x)
+ df
+ }, simplify = FALSE)
>
> datasets
$DF1
Numbers Letters_DF1
1 1 A
2 2 B
3 3 C
4 4 D
$DF2
Numbers Letters_DF2
1 1 A
2 9 Z
3 3 C
4 14 X
>数字字母DF1数字字母DF2
>数据集
>数据集colnames(df[2])colnames(df[2])