我有这样的数据:
x1 = seq(0, 2, length=5)
x2 = seq(1, 2, length=5)
x3 = seq(0, 1, length=5)
df = data.frame(rbind(x1,x2,x3))
我想获取值小于1的特定列(基于名称)的比例。以下内容选择名称中包含“ x”的变量,并对列中的值求和。
df <- df %>%
mutate(sumVar = rowSums(select(., contains("x")), na.rm = TRUE))
是否可以在此设置中包括ifelse逻辑来确定值<1的列所占的比例(与我在这里计算总和相反)?我正在使用包含功能,因为我想在不一定按顺序排列但名称相同的列中计算此数量。
您可以在以下条件下使用rowMeans()
:
library(dplyr)
df %>%
mutate(propVar = rowMeans(select(., contains("x")) < 1))
x1 x2 x3 propVar
1 0.0 1.00 0.00 0.6666667
2 0.5 1.25 0.25 0.6666667
3 1.0 1.50 0.50 0.3333333
4 1.5 1.75 0.75 0.3333333
5 2.0 2.00 1.00 0.0000000
我们可以在rowMeans
中使用base R
df$propVar <- rowMeans(df[startsWith(names(df), "x")]<1)