Re: [问题] 在R执行类似Excel countif > 0

楼主: celestialgod (天)   2023-04-19 14:39:40
※ 引述《haitairoutzu (海苔肉粽)》之铭言:
: [问题类型]:
: 程式咨询(我想用R 做某件事情,但是我不知道要怎么用R 写出来)
: [软件熟悉度]:
: 入门(写过其他程式,只是对语法不熟悉)
: [问题叙述]:
: 我有一笔dataset,
: 我想计算每一个Row中,大于0的数值有多少,并新增一个column记录。如附图所示
: https://i.imgur.com/mdV6cIW.jpg
: [程式范例]:
: 目前data set
: data <- data.frame(ID=c('A', 'B', 'C', 'D', 'E'),
: V1=c(14, 0, 8, 0, 0),
: V2=c(0, 5, 5, 0, 5),
: V3=c(1, 7, 5, 0, 12),
: V4=c(7, 5, 0, 0, 12))
:
很久没回文 简单回一下
你的范例跟你的描述对不起来 我就用你的描述写了
# 1
data[ , "varGreaterThan0"] = apply(data[ , sapply(data, is.numeric)], 1,
function(v) sum(v > 0))
# 2-1
library(dplyr)
data_frame(data) %>% mutate(varGreaterThan0 = (V1 > 0) + (V2 > 0) + (V3 > 0)
+ (V4 > 0))
# 2-2
library(rlang)
numColnames <- names(data)[sapply(data, is.numeric)]
varGreaterThan0Expression <- paste0("(", numColnames, ">0)", collapse = "+")
data_frame(data) %>% mutate(varGreaterThan0 =
!!parse_expr(varGreaterThan0Expression))
# 3
library(data.table)
DT <- data.table(data)
numColnames <- names(DT)[sapply(DT, is.numeric)]
varGreaterThan0Expression <- paste0("(", numColnames, ">0)", collapse = "+")
DT[ , varGreaterThan0 := eval(parse(text=varGreaterThan0Expression))]
作者: locka (locka)   2023-04-19 20:13:00
感谢celestialgod大大提供这么多种写法!另外想请教 2-2 rlang的写法,parse_express前面的两个惊叹号的意思,是固定用法吗?

Links booklink

Contact Us: admin [ a t ] ucptt.com