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