我正在分析5年内存储在单独月度文件中的数据。预期各个数据集的每个数据集具有不同数量和行(案例)的混合,但应具有相同的变量和变量名称。但是,我从他们看来有些人不知道,并且在将所有数据集合并到一个数据框之前我将不得不操纵它们。是否有任何方法可以自动识别这些过程,特别是记录我所做的更改?
例如,假设我有以下4个数据集:
df1 <- data.frame(id = c(1, 2, 3), age = c(10, 20, 30), color =
c("green", "purple", "gold"))
df2 <- data.frame(id = c(1, 2, 3, 4), age = c(10, 20, 30, 40), color =
c("green", "purple", "gold", "blue"))
df3 <- data.frame(id = c(1, 3, 4), age = c(10, 30, 40), colour =
c("green", "gold", "blue"), kids = c(0, 1, 1))
df4 <- data.frame(id = c(1, 2, 4), color = c("green", "purple",
"blue"), age = c(10, 20, 40))
所有4个数据集应该看起来像df1和df2,但是df3对于一个变量(“颜色”)和额外变量(“孩子”)有不同的拼写,而df4则反转两个变量的顺序(“年龄”和“颜色”)。
我可以直观地检查列号和名称以识别问题,如下所示:
df.list <- list(df1,df2,df3,df4)
df.cols <- lapply(df.list, function(x) ncol(x))
df.names <- lapply(df.list, function(x) names(x))
输出
> df.cols
[[1]]
[1] 3
[[2]]
[1] 3
[[3]]
[1] 4
[[4]]
[1] 3
> df.names
[[1]]
[1] "id" "age" "color"
[[2]]
[1] "id" "age" "color"
[[3]]
[1] "id" "age" "colour" "kids"
[[4]]
[1] "id" "color" "age"
但我有更多的变量和数据集。有没有更有效的方法来做到这一点,自动和可重复地识别不匹配?我只找到了比较各对数据集的方法。感谢您提供任何帮助或建议!
答案 0 :(得分:0)
一种简单的方法可以
dflist <- mget(paste0("df", 1:4))
nametest <- sapply(dflist,function(x){names(x) %in% names(df1)})
$df1
[1] TRUE TRUE TRUE
$df2
[1] TRUE TRUE TRUE
$df3
[1] TRUE TRUE FALSE FALSE
$df4
[1] TRUE TRUE TRUE
然后只看到有问题的那些
quickview <- unlist(sapply(nametest,function(x){if(!all(x))"name pb"}))
df3
"name pb"
这样您可以同时验证名称和列(带有其他名称的附加列将在nametest中显示为FALSE)。 如果您想要错误列的索引:
index <- sapply(dflist,function(x){
which(!names(x) %in% names(df1))})
$df1
integer(0)
$df2
integer(0)
$df3
[1] 3 4
$df4
integer(0)
如果你想要列的名字:
wrongnames <- sapply(dflist,function(x){
indx <- which(!names(x) %in% names(df1))
names(x)[indx]
})