如果我们将行索引也用作 hte 列之一,我们也可以应用一次table
cbind(df, as.data.frame.matrix(table(c(row(df)), unlist(df))))
# C1 C2 C3 C4 C5 C6 C7 C8 C9 a b c d
#1 a a a c d b c c a 4 1 3 1
#2 a a b b c b b a b 3 5 1 0
#3 a c c d d b c b b 1 3 3 2
#4 c a d c d d c d d 1 0 3 5
如果我们需要创建“无效”列
t1 <- table(c(row(df)), unlist(df))
cbind(df, as.data.frame.matrix(t1), invalid = as.logical(rowSums(t1 > 4)))
# C1 C2 C3 C4 C5 C6 C7 C8 C9 a b c d invalid
#1 a a a c d b c c a 4 1 3 1 FALSE
#2 a a b b c b b a b 3 5 1 0 TRUE
#3 a c c d d b c b b 1 3 3 2 FALSE
#4 c a d c d d c d d 1 0 3 5 TRUE
数据
df <- structure(list(C1 = c("a", "a", "a", "c"), C2 = c("a", "a", "c",
"a"), C3 = c("a", "b", "c", "d"), C4 = c("c", "b", "d", "c"),
C5 = c("d", "c", "d", "d"), C6 = c("b", "b", "b", "d"), C7 = c("c",
"b", "c", "c"), C8 = c("c", "a", "b", "d"), C9 = c("a", "b",
"b", "d")), class = "data.frame", row.names = c("1", "2",
"3", "4"))