【问题标题】:Percentage of each row that meet a condition in a data frame in RR中数据框中满足条件的每一行的百分比
【发布时间】:2020-12-13 11:17:14
【问题描述】:

我有一个数据框(调用“dat”)和一个包含 6 个元素的向量(调用 v)

我想在数据框中添加 6 个新列

第一个新列:每行中大于向量的第一个元素的元素数

2nd新列:每行中大于2nd向量元素的元素数

第3个新列:每行中大于向量的第3个元素的元素数

等等……

dat<-data.frame(replicate(10,sample(0:6,50,rep=TRUE)))
v<-c(2,4,1,3,5,6)

谢谢

【问题讨论】:

  • dat 中任何行的百分比是多少?
  • 我的意思是每行中大于 v 的第一个元素的元素数除以每行中的元素总数

标签: r


【解决方案1】:

在基础 R 中,您可以这样做:

dat[paste0('greater_than_', v)] <- lapply(v, function(x) rowSums(dat >= x))

purrr,你可以这样做:

dat[paste0('greater_than_', v)] <- map(v, ~rowSums(dat >= .x))

【讨论】:

  • Ronak,我们如何在purrr 中做到这一点?对于一个值,我们可以像dat %&gt;% rowwise() %&gt;% mutate(y1 = sum(across() &gt; 2)/10)
  • purrr 的语法也相同。我用那个更新了答案。
【解决方案2】:

我们可以这样使用tidyverse

library(dplyr)
library(purrr)
library(stringr)
map_dfc(v, ~rowSums(dat >= .x)) %>% 
     rename_all(~str_c('greater_than_', v)) %>% 
     bind_cols(dat, .)

或者在base R 中使用for 循环

for(i in seq_along(v)) dat[paste0('greater_than_', v[i])] <- rowSums(dat >= v[i])

【讨论】:

    猜你喜欢
    • 2018-03-11
    • 2020-01-09
    • 2017-09-15
    • 2019-02-15
    • 2022-08-18
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多