0

我是一个 R 初学者,我有一个巨大的数据框,所以这里是数据框的一个小复制品。

我想计算每个数据框行的“U”和“A”的百分比。

不是每个字母都出现在每一行中,所以简单的 prop.table 函数并没有给我想要的输出。当每行中没有提供所有 4 个字母时,我遇到了问题。

    ####Here is my sample dataset:
    a <- c("A","B","H","U","U","U")
    b <- c("A","H","H","U","U","U")
    c <- c("B","B","H","U","U","U")
    d <- c("H","H","H","U","U","U")
    e <- c("U","U","U","U","U","U")
    data<-data.frame(a,b,c,d,e)

我希望每一行都有一个“A”和“U”的百分比。如果这些字母之一没有出现在该行中,则结果可能是 NA。

4

2 回答 2

3

我们可以用rowMeans

rowMeans(data == "A" | data == "U", na.rm = TRUE)
#[1] 0.5 0.0 0.0 1.0 1.0 1.0
于 2019-09-04T13:54:48.400 回答
2

一种选择是遍历数据集的行并获取mean逻辑向量的

apply(data, 1, function(x) mean(x %in% c("A", "U")))
#[1] 0.5 0.0 0.0 1.0 1.0 1.0

或者另一种选择是

rowMeans(Reduce(`|`, lapply(c("A", "U"), function(x) data == x)))
#[1] 0.5 0.0 0.0 1.0 1.0 1.0

当有许多元素进行比较时,这两种方法也可以工作

于 2019-09-04T13:52:31.433 回答