r - 计算数据框中的元素并创建新列

标签 r apply

我有一个非数字数据的数据框,即

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/

相关文章:

r - 列表中向量的频率

r - 计算 R 中每列高于阈值范围的值的数量

R:重新排列列表,purrr

Python pandas 使用滚动以矢量化方式应用于 groupby 对象来计算机车车辆 beta

r - 从数据帧列表中获取名称与 id 连接的向量

r - 如何在 org-mode 中转义双括号 [[ in-line

mysql - 使用 dplyr 访问 sql 表/查询时计算行数

r - R中有类似Statas xtline的东西吗?或者: How do you quickly visualize a panel?

r - 从数据框中选择一组满足条件的列

python - 使用apply()从两​​列创建一个新列