R 基于条件的跨列计数

标签 r count conditional-statements

我正在尝试制作一个如下所示的数据集:

name    X1  X2  X3  Num_Low Num_0
case1   0.2 0.5 1   2        0
case2   1   1   1   0        0
case3   0.2 0.2 0   2        1
case4   0.5 1   1   1        0
case5   0   0   1   0        2
case6   0.2 0   0   1        2

目前,我的数据集包含名称、X1、X2 和 X3 列。我需要帮助创建 Num_Low 和 Num_0 列。

Num_Low 应该是每行中值小于 1 但大于 0 的 X 变量的数量。

Num_0 应该是恰好等于 0 的 X 变量的数量。

在我的实际数据集中,我有许多变量都以 X 开头,所以如果除了输入 X1、X2 等之外我还能做些什么,那就太好了(但不是必需的!) 。如果有一种方法可以清楚地使用 dplyr 来完成此操作,那也会非常有帮助!

谢谢!

最佳答案

# Get the index of columns starting with "X" 
index <- which(substr(colnames(df), 1, 1) == "X")
# Compute the new variables based on your conditions
df$Num_Low <- rowSums(df[, index] < 1 & 
                      df[, index] > 0)
df$Num_0 <- rowSums(df[, index] == 0)
df

#   name  X1  X2 X3 Num_Low Num_0
#1 name1 0.2 0.5  1       2     0
#2 name2 1.0 1.0  1       0     0
#3 name3 0.2 0.2  0       2     1
#4 name4 0.5 1.0  1       1     0
#5 name5 0.0 0.0  1       0     2
#6 name6 0.2 0.0  0       1     2

dplyr 版本:

library(dplyr)
df %>%
  select(index) %>%
  mutate(Num_Low = rowSums(. < 1 & . > 0),
         Num_0 = rowSums(. == 0))

#   name  X1  X2 X3 Num_Low Num_0
#1 name1 0.2 0.5  1       2     0
#2 name2 1.0 1.0  1       0     0
#3 name3 0.2 0.2  0       2     1
#4 name4 0.5 1.0  1       1     0
#5 name5 0.0 0.0  1       0     2
#6 name6 0.2 0.0  0       1     2

示例数据

df <- data.frame(name = paste0("name", 1:6),
                 X1 = c(0.2,1,0.2,0.5,0,0.2),
                 X2 = c(0.5,1,0.2,1,0,0),
                 X3 = c(1,1,0,1,1,0))

关于R 基于条件的跨列计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52995106/

相关文章:

r - 如何将 LME4 输出提取到 latex 表?

R taskscheduleR不执行脚本

r - 将大空间多边形数据框转换为栅格堆栈时如何提高速度

python - 创建一个新列,根据条件查找日期差异

r - 在 ggplot 中使用参数占位符

php - 如何获取每个用户的所有帖子?

python - 计算与变量不同的列表/元组元素?

python - 如何从读取的 csv 中重新计算每个类(class)的人数

php - 条件语句中的概率

CakePHP 3 - 无法生成带有 WHERE...OR 条件的查询