我有一组具有不同标题的dfs,我需要逐行绑定:我希望更改cols的名称,以便每个标题具有相同的标题。
DF1
name, score
smith, 3
smith, 7
smith, 5
DF2
type, price
food, 3
food, 5
food, 2.6
我希望将它组合起来,使每个标题具有相同的标题并按行组合。我有32个这些数据帧都有不同的标题,所以我打算使用循环
我列出了dfs
groups <- c(df1, df2, df3, etc)
然后尝试组合成一个空的df:
new_df <- data.frame(words=character(),numbers=numeric())
for (i in 1:length(groups))
{
x <- data.frame(words=character(),numbers=numeric())
x[,1] <- groups[i]
x[,2] <- groups[i+1]
new_df <- rbind(new_df, x)
}
不幸的是,它只返回一个带有一堆警告的空df。谁能告诉我如何纠正这个?我希望new_df是;
words, numbers
smith, 3
smith, 7
smith, 5
food, 3
food, 5
food, 2.6
我确信对于比我更有经验的人来说这很容易。谢谢
答案 0 :(得分:5)
为什么你的32个data.frames在list
中并不完美?首先从野外捕捉它们:
dfList <- mget(paste0("df", 1:32))
然后您可以使用lapply
:
dfList <- lapply(dfList, setNames, nm = c("words", "numbers"))
最后你rbind
他们:
DF <- do.call(rbind, dfList)
答案 1 :(得分:1)
您希望do.call
和rbind.data.frame
正确执行此操作。 do.call
调用一个函数并为其提供一个参数列表,rbind.data.frame
参数为rbind
专门用于数据框。
请注意,这仅适用于变量df1$words
和df2$words
不是因素,否则您将遇到没有正确因子水平的问题。
new.df <- do.call(what = rbind.data.frame,
args = list(df1,df2))
编辑添加:更一般地说,您一直想使用rbind()
功能。您一直在尝试使用循环,但这应该通过R中的函数来完成。
另外,正如David Arenburg所指出的,rbind()
只有在您的表具有相同的变量名时才会起作用。解决这个问题的一种快速方法可能是在所有这些问题上使用setNames()
来为它们指定相同的名称。
list_of_dfs <- list(df1,df2,df...)
list_of_dfs <- lapply(X = list_of_dfs,
FUN = setNames,
nm = c("words","numbers"))
big.df <- do.call(what = rbind.data.frame,
args = list_of_dfs)