我有以下数据,我已按名称将其拆分为单独的数据框。在我运行以下代码后,每个数据集中的变量都自动命名为"X..i.."
。
我想重命名每个单独数据框的变量,使其与数据集匹配。
# load data
df1_raw <- data.frame(name = c("A", "B", "C", "A", "C", "B"),
start = c(1, 3, 4, 5, 2, 1),
end = c(6, 5, 7, 8, 6, 7))
df1 <- split(x = df1_raw, f = df1_raw$name) # split data by name
df1 <- lapply(df1, function(x) Map(seq.int, x$start, x$end)) # generate sequence intervals
df1 <- map(df1, unlist) # unlist sequences
df1 <- lapply(df1, data.frame) # convert to df
# rename variables
name <- c("A", "B", "C")
for (i in seq_along(df1)) {
names(df1[i]) <- name[i]
}
最后一个 for 循环对重命名变量不起作用。当我键入 names(df1$A)
时,我仍然得到 "X..i.."
。我希望 names(df1$A)
的输出是 "A"
。
有没有人对如何重命名这些变量有任何想法?谢谢!
最佳答案
从列表中索引时需要使用[[]]
for (i in seq_along(df1)) {
names(df1[[i]]) <- name[i]
}
或者,您可以更改创建列表的方式,这样您就不必在事后重命名
df1 <- split(x = df1_raw, f = df1_raw$name) # split data by name
df1 <- lapply(df1, function(x) Map(seq.int, x$start, x$end)) # generate sequence intervals
df1 <- map(df1, unlist) # unlist sequences
df1 <- Map(function(x,name) {as.data.frame(setNames(list(x), name))}, df1, names(df1))
关于r - 使用 for 循环重命名数据框中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65400711/