抓取一些列并计算 inr 的比例
grab some columns and calculate the proportion inr
id=1:5
age1=c(67,39,97,55,37)
age2=c(300,122,333,70,333)
age3=c(1,3,6,1,3)
age4=c(56,33,34,77,99)
gender=c("f","m","f","f","m")
data=data.frame(id, age1, age2, age3, age4, gender)
length(data$age1[data$age1 > 50])/length(data$age1)
length(data$age2[data$age2 > 50])/length(data$age2)
length(data$age3[data$age3 > 50])/length(data$age3)
length(data$age4[data$age4 > 50])/length(data$age4)
首先,我想使用 %in%
运算符获取年龄列(age1、age2、age3、age4)(获取名称中包含年龄的列)
然后,我要计算比例-
但我的代码似乎效率低下。
这是一个可重现的例子,在我的数据中,我有不同的 30 岁...
一个 base
解决方案 grep()
提取包含 "age"
:
的列名
colMeans(data[grep("age", names(data))] > 50)
# age1 age2 age3 age4
# 0.6 1.0 0.0 0.6
您还可以将 summarise()
与 dplyr
中的 across()
一起使用。
library(dplyr)
data %>%
summarise(across(contains("age"), ~ mean(.x > 50)))
# age1 age2 age3 age4
# 1 0.6 1 0 0.6
提示:可以用mean()
得到一个逻辑向量TRUE
的比例
id=1:5
age1=c(67,39,97,55,37)
age2=c(300,122,333,70,333)
age3=c(1,3,6,1,3)
age4=c(56,33,34,77,99)
gender=c("f","m","f","f","m")
data=data.frame(id, age1, age2, age3, age4, gender)
length(data$age1[data$age1 > 50])/length(data$age1)
length(data$age2[data$age2 > 50])/length(data$age2)
length(data$age3[data$age3 > 50])/length(data$age3)
length(data$age4[data$age4 > 50])/length(data$age4)
首先,我想使用 %in%
运算符获取年龄列(age1、age2、age3、age4)(获取名称中包含年龄的列)
然后,我要计算比例- 但我的代码似乎效率低下。 这是一个可重现的例子,在我的数据中,我有不同的 30 岁...
一个 base
解决方案 grep()
提取包含 "age"
:
colMeans(data[grep("age", names(data))] > 50)
# age1 age2 age3 age4
# 0.6 1.0 0.0 0.6
您还可以将 summarise()
与 dplyr
中的 across()
一起使用。
library(dplyr)
data %>%
summarise(across(contains("age"), ~ mean(.x > 50)))
# age1 age2 age3 age4
# 1 0.6 1 0 0.6
提示:可以用mean()
得到一个逻辑向量TRUE
的比例