[英]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"
其中df1
和df2
是@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
自促銷警報,我編寫了此程序包-正在發布此功能,因為它確實可以解決此問題。
我們可以將sapply
與class
一起使用,以遍歷df1
和df2
所有列。 之后,我們可以比較結果。
# 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.