我有一个非数字数据的数据框,即
Col1 <- c("a", "b","b",NA)
Col2 <- c(NA, "a", "c", NA)
Col3 <- c(NA,NA,"b", "a")
dat <- data.frame(Col1, Col2, Col3)
dat
# Col1 Col2 Col3
# 1 a <NA> <NA>
# 2 b a <NA>
# 3 b c b
# 4 <NA> <NA> a
我想添加列来计算每行中每个字符的出现次数。我希望数据框看起来像这样
dat
# Col1 Col2 Col3 a b c
# 1 a <NA> <NA> 1 0 0
# 2 b a <NA> 1 1 0
# 3 b c b 0 2 1
# 4 <NA> <NA> a 1 0 0
我用了函数
f <- function(x) {
sum(x == "a", na.rm = T)}
找到“a”、“b”和“c”列,但要说明的字符很多,我希望有人能建议一种更快的方法。我怀疑可以使用 apply
函数,但我没有成功。
最佳答案
您可以使用table
计算每个因素水平。此函数使用 apply
应用于每一行。使用 factor
及其 levels
参数来计算未在一行中表示的(可能的)因子水平。在第一步中,我们找到数据可以采用的所有可能值。
levs <- unique(unlist(dat))
count <- t(apply(dat, 1, function(x) table(factor(x, levels = levs))))
cbind(dat, count)
# Col1 Col2 Col3 a b c
# 1 a <NA> <NA> 1 0 0
# 2 b a <NA> 1 1 0
# 3 b c b 0 2 1
# 4 <NA> <NA> a 1 0 0
关于r - 计算数据框中的元素并创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24891419/