我有一个数字向量
my.vec <- c(244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258)
我有数据框
set.seed(123)
df <- data.frame(loc.id = rep(1:10), x1 = sample(190:285,10, replace = T), x2 = sample(200:350,10, replace = T), x3= sample(100:280,10, replace = T), x4= sample(250:350,10, replace = T), x5 = sample(150:300,10, replace = T))
我想在df
中创建另一个列,其中显示每个loc.id(或每行),列{x}到x5中出现my.vec
的百分比。我设法做到了这一点。
apply(df[,2:6],1,function(x) x %in% my.vec)
如果列中的元素出现在my.vec中,则这会给我TRUE或FALSE。我只需要找到一些方法将其表示为百分比
答案 0 :(得分:2)
将其包裹在ColMeans
中并乘以100:
df$new_col = colMeans(apply(df[,2:6],1,function(x) x %in% my.vec)) * 100
答案 1 :(得分:1)
这是一种dplyr
方法,用于在my.vec
中获取行的比例值:
df %>% mutate(
prop.my.vec = df %>%
select(starts_with("x")) %>%
mutate_all(funs(. %in% my.vec)) %>%
rowSums() / 5
)
# loc.id x1 x2 x3 x4 x5 prop.my.vec
# 1 1 225 332 226 292 215 0.0
# 2 2 194 306 273 282 216 0.0
# 3 3 258 310 138 269 264 0.2
# 4 4 253 340 219 266 200 0.2
# 5 5 213 268 267 302 209 0.0
# 6 6 218 289 244 342 185 0.2
# 7 7 246 323 112 270 160 0.2
# 8 8 222 233 170 332 287 0.0
# 9 9 249 262 173 252 266 0.4
# 10 10 242 205 219 343 166 0.0