我正在尝试制作一个像这样的数据集:
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应该是每行X变量的数量,其值小于1但大于0。
Num_0应该是完全等于0的X变量的数量。
在我的实际数据集中,我有很多都以X开头的变量,因此,除了键入X1,X2等之外,我还能做些其他事情,那会很棒(但不是必须的!) 。如果有明确的方法可以使用dplyr做到这一点,那也将非常有帮助!
谢谢!
答案 0 :(得分:4)
# 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))