簡體   English   中英

r比較兩個數據框之間的列類型

[英]r compare column types between two dataframes

這可能是一個不好的問題,因為我沒有發布任何可復制的示例。 我的主要目標是識別具有相同列名的 兩個數據框之間類型不同的列。

例如

df1

 Id      Col1      Col2     Col3
 Numeric Factor    Integer  Date

df2

 Id      Col1      Col2     Col3
 Numeric Numeric    Integer  Date

在這里,兩個數據幀(df1,df2)都具有相同的列名,但Col1類型不同,我對識別此類列感興趣。 預期的輸出。

Col1  Factor    Numeric

有什么建議或提示來實現這一目標? 謝謝

對於更緊湊的方法,可以將列表與sapply() 在這里效率不應該成為問題,因為我們要做的只是抓住課程。 在這里,我將數據幀名稱添加到列表中以創建更清晰的輸出。

m <- sapply(list(df1 = df1, df2 = df2), sapply, class)
m[m[, "df1"] != m[, "df2"], , drop = FALSE]
#      df1      df2        
# Col1 "factor" "character"

其中df1df2是@ycw的答案中的數據。

如果兩個數據框具有相同的列名,則下面將為您提供具有不同類的列。

library(dplyr)
m1 = mtcars
m2 = mtcars %>% mutate(cyl = factor(cyl), vs = factor(cyl))
out = cbind(sapply(m1, class), sapply(m2, class))
out[apply(out, 1, function(x) !identical(x[1], x[2])), ]

嘗試這個:

compareColumns <- function(df1, df2) {
  commonNames <- names(df1)[names(df1) %in% names(df2)]
  data.frame(Column = commonNames,
             df1 = sapply(df1[,commonNames], class),
             df2 = sapply(df2[,commonNames], class)) }

嘗試從janitor包中進行compare_df_cols()

library(janitor)
mtcars2 <- mtcars
mtcars2$cyl <- as.character(mtcars2$cyl)
compare_df_cols(mtcars, mtcars2, return = "mismatch")

#>   column_name  mtcars   mtcars2
#> 1         cyl numeric character

自促銷警報,我編寫了此程序包-正在發布此功能,因為它確實可以解決此問題。

我們可以將sapplyclass一起使用,以遍歷df1df2所有列。 之后,我們可以比較結果。

# Create example data frames
df1 <- data.frame(ID = 1:3,
                  Col1 = as.character(2:4),
                  Col2 = 2:4,
                  Col3 = as.Date(paste0("2017-01-0", 2:4)))

df2 <- data.frame(ID = 1:3,
                  Col1 = as.character(2:4),
                  Col2 = 2:4,
                  Col3 = as.Date(paste0("2017-01-0", 2:4)),
                  stringsAsFactors = FALSE)

# Use sapply and class to find out all the class
class1 <- sapply(df1, class)
class2 <- sapply(df2, class)

# Combine the results, then filter for rows that are different
result <- data.frame(class1, class2, stringsAsFactors = FALSE)
result[!(result$class1 == result$class2), ]
     class1    class2
Col1 factor character

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM