计算数据框行中的唯一元素,并返回最大出现的元素

时间:2013-03-17 12:28:35

标签: r vector dataframe

是否可以计算数据框行中的唯一元素,并返回一个最大出现的元素,并将其作为向量的结果。

example:
a a a b b b b -> b 
c v f w w r t -> w
s s d f b b b -> b

3 个答案:

答案 0 :(得分:4)

您可以使用apply在数据帧的每一行上使用table函数。

df <- read.table(textConnection("a a a b b b b\nc v f w w r t\ns s d f b b b"), header = F)

df$result <- apply(df, 1, function(x) names(table(x))[which.max(table(x))])

df
##   V1 V2 V3 V4 V5 V6 V7 result
## 1  a  a  a  b  b  b  b      b
## 2  c  v  f  w  w  r  t      w
## 3  s  s  d  f  b  b  b      b

答案 1 :(得分:1)

table

x=c("a", "a", "a", "b" ,"b" ,"b" ,"b")
table(x)
x
a b 
3 4 

使用data.table编辑

DT = data.table(x=sample(letters[1:5],10,T),y=sample(letters[1:5],10,T))
#DT
#    x y
# 1: d a
# 2: c d
# 3: d c
# 4: c a
# 5: a e
# 6: d c
# 7: c b
# 8: a b
# 9: b c
#10: c d

f = function(x) names(table(x))[which.max(table(x))]
DT[,lapply(.SD,f)]
#   x y
#1: c c

答案 2 :(得分:1)

请注意,如果您想保留 ALL max,则需要明确要求。

您可以将它们保存为data.frame中的列表。如果每行只有一个,那么列表将简化为公共向量

  df$result <- apply(df, 1, function(x) {T <- table(x); list(T[which(T==max(T))])})

与Ties for max:

df2 <- df[, 1:6]
df2$result <- apply(df2, 1, function(x) {T <- table(x); list(T[which(T==max(T))])})

> df2
  V1 V2 V3 V4 V5 V6 result
1  a  a  a  b  b  b   3, 3
2  c  v  f  w  w  r      2
3  s  s  d  f  b  b   2, 2

没有最大关系:

df$result <- apply(df, 1, function(x) {T <- table(x); list(T[which(T==max(T))])})

> df
  V1 V2 V3 V4 V5 V6 V7 result
1  a  a  a  b  b  b  b      4
2  c  v  f  w  w  r  t      2
3  s  s  d  f  b  b  b      3