我有一個擁有數千行和近百列的資料集。每一行只包含唯一的元素,然而這些元素也可能在其他行中找到。
基本上,我想在我的資料框架中創建兩個新的列,一個用于存盤多少個唯一的,另一個用于存盤某一行中有多少個不連續的元素,但與整個資料集相比。
注意,在計算唯一的和模糊的元素時,資料框架中有些NAs不應該被考慮。
df <- data.frame()
col1 = c('Ab'/span>。 'Cd'。 'Ef', 'Gh'。 'Ij'),
col2 = c('Ac'。 'Ce'。 'Eg', 'Gi'。 'Ik'),
col3 = c('Acc'。 NA。 'Ab', 'Gef'。 'Il'),
col4 = c(NA。 NA。 NA, 'Ce, 'Im')
)
在上面創建的資料框架中,Ab不是唯一的,所以在第1行中,與整個資料集相比,有2個唯一的和1個模糊的元素。
在我的預期輸出中,第1行的Unique將等于2,而Ambiguous = 1。在第五行,它將分別是4和0。
我已經搜索了可能的解決方案,但大多數解決方案只涉及特定行中的唯一或重復元素,或針對特定列的多行。無論如何,如果有任何幫助,我們將不勝感激。
uj5u.com熱心網友回復:
另一種方法可以避免一些重新計算。
# First we get the duplicates to avoid recounting every time.
freqs <- table(as.matrix(df))
dupes <- names(freqs[/span>freqs > 1])
# 檢查這些值是否(不)重復。
is_dupe < - rowSums(apply(df, 2, "%in%", dupes))
not_dupe < - rowSums(apply(df, 2, function(x) {! (x %in% dupes | is. na(x))}))
# 在我們計算完計數后再添加列,以避免包括它們。
df$ambiguous <- is_dupe
df$unique <- not_dupe
df
# col1 col2 col3 col4 ambiguous unique[/span]。
# 1 Ab Ac Acc <NA> 1 2
# 2 Cd Ce <NA> <NA> 1 1
# 3 Ef Eg Ab <NA> 1 2
#4 Gh Gi Gef Ce 1 3
# 5 Ij Ik Il Im 0 4
uj5u.com熱心網友回復:
像這樣的情況如何:
df <- data.frame(_span>)
col1 = c('Ab'/span>。 'Cd'。 'Ef', 'Gh'。 'Ij'),
col2 = c('Ac'。 'Ce'。 'Eg', 'Gi'。 'Ik'),
col3 = c('Acc'。 NA。 'Ab', 'Gef'。 'Il'),
col4 = c(NA。 NA。 NA, 'Ce, 'Im')
)
uvals <- avals < - rep(NA。 nrow(df))
for(i in 1: nrow(df)){
other_vals <- na.省略(c(unique(as. 矩陣(df[-i。 ]))))
tmp <- na.omit(as. 矩陣(df)[/span>i。 ]) %in% other_vals
uvals[i] < - sum(tmp == 0, na. rm=TRUE)。
avals[i] < - sum(tmp == 1, na. rm=TRUE)。
}
df <- df %>%
mutate(unique = uvals,)
模糊的= avals)
df
# col1 col2 col3 col4 unique ambiguous
# 1 Ab Ac Acc <NA> 2 1
# 2 Cd Ce <NA> <NA> 1 1
# 3 Ef Eg Ab <NA> 2 1
# 4 Gh Gi Gef Ce 3 1
# 5 Ij Ik Il Im 4 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/332226.html
標籤:
上一篇:如何在R中把類別轉換為數字?
