当列是因子时,您如何计算“B”或“C”按行显示的次数?我得到了如果使用rowSums()
数字的方法,但我没有看到如何计算因子水平。
有:
df <- data.frame(v1=factor(c("A", "A", "A", "B")),
v2=factor(c("A", "B", "B", "B")),
v3=factor(c("C", "A", "B", "B")))
想要:
# 1 1 2 3
更新
rowSums()
因实际用例而失败,因为我的数据框有日期列。这是一个更好的玩具示例:
df2 <- data.frame(v1=factor(c("A", "A", "A", "B")),
v2=factor(c("A", "B", "B", "B")),
v3=factor(c("C", "A", "B", "B")),
v4=as.Date("1998-12-17"))
答案 0 :(得分:2)
来自@DavidArenburg:
rowSums(df == "C" | df == "B")
这适用于原始df
示例。我的实际用例在数据框中有日期列,因此失败了。基于@Frank的想法的修改方法:
rowSums(df2[sapply(df2, is.factor) | sapply(df2, is.character)]=="B" | df2[sapply(df2, is.factor) | sapply(df2, is.character)]=="C", na.rm=T)
可能是一种更清晰的编码方式,但它有效:
#[1] 1 1 2 3
答案 1 :(得分:0)
使用您的数据框并假设您对第1行到第4行感兴趣 试试这个:
mapply(function(x) {tapply(as.vector(as.matrix(df[x,])), as.vector (as.matrix(df[x,])), length)}, 1:4)
结果是:
[[1]]
A C
2 1
[[2]]
A B
2 1
[[3]]
A B
1 2
[[4]]
B
3
结果是列表,每个子列表提供每行的所有分组的计数。这个相当普遍的问题是关于行中的值。