如何解决有条件地对数据帧的每一行进行计数
我有一个包含97个变量的数据框。对于变量32至97,我需要计算每行中出现的值1、2、3和4的实例数(仅适用于32至97的变量)。
这是数据帧的结构:
structure(list(subject_label = c("01","01"),event_code = c("b","16"),site_id = c(5,5),site_label = c("a","a"),event_label = c("Baseline",NA),done = c(1L,ndreason = c(NA_integer_,NA_integer_
),rater = c("OLD",carerid = c(1L,ntgph = c(4L,nt1ph = c(2L,ntgmh = c(2L,ntgse = c(0L,ntgxv = c(1L,ntgxb = c(0L,ntgxg = c(0L,ntgxh = c(0L,ntgxd = c(0L,ntgxa = c(0L,ntgxm = c(0L,ntgxw = c(0L,ntgxp = c(0L,ntgcd = c(0L,ntgch = c(0L,ntgcs = c(0L,ntgnr = c(0L,ntgii = c(0L,ntsem = c(0L,ntsei = c(0L,ntsev = c(0L,ntsey = c(NA_integer_,NA_integer_),ntseo = c("Interpersonal conflict with co-workers",ntawb = c(0L,ntahd = c(0L,ntaid = c(0L,ntaui = c(0L,ntahe = c(0L,ntaub = c(0L,ntadi = c(1L,ntatb = c(NA_integer_,ntcic = c(0L,ntcfw = c(0L,ntcfi = c(0L,NA
),ntclc = c(0L,ntcnr = c(0L,ntcnw = c(0L,ntses = c(0L,ntsia = c(0L,ntswf = c(1L,ntscn = c(0L,ntssd = c(0L,ntswn = c(0L,ntswe = c(0L,ntssl = c(0L,ntacw = c(0L,ntalb = c(0L,ntacs = c(NA_integer_,ntafa = c(0L,ntaaw = c(0L,ntmrp = c(0L,ntmdr = c(0L,ntmre = c(0L,ntmfw = c(0L,ntmlt = c(4L,ntmmo = c(0L,ntmwp = c(0L,ntmpp = c(0L,ntmpl = c(0L,ntbaw = c(0L,ntbws = c(1L,ntbwp = c(4L,ntbla = c(0L,ntbow = c(0L,ntbor = c(4L,ntbhh = c(4L,ntbfo = c(0L,ntbii = c(4L,ntblc = c(0L,ntbaa = c(0L,ntbad = c(0L,ntbva = c(0L,ntbpa = c(0L,ntbtt = c(0L,ntbll = c(0L,ntbts = c(1L,ntrca = c(0L,ntrht = c(0L,ntrst = c(0L,ntrct = c(0L,ntrci = c(1L,ntrcm = c(0L,ntoog = c(0L,ntoop = c(0L,ntoof = c(0L,ntooa = c(0L,ntoow = c(0L,ntoov = c(0L,ntgsp = c("a",update_stamp = c("a",class = "data.frame")
我想做的是这个
NTG$symptoms_morethanyear <- length(which(NTG[,c(32:97)] == 1))
但是,这似乎可以汇总这些字段中的所有内容,并将总和放在最后一列中(不会每行单独进行一次操作)。
解决方法
如果您不介意将列37修改为97,这是一个解决方案
library(tidyverse)
data_frame%>%
mutate_at(vars(37:97),list(~if_else(. %in% 1:4,1,0)))%>%
mutate(conts = rowSums(select(.,37:97)))%>%select(97:101)
ntoov ntgsp update_stamp conts
1 0 a a 10
2 0 <NA> <NA> 0
如果您不想修改第32至97列,也可以执行以下操作:
library(data.table)
data_frame$counts <- rowSums(data_frame[,32:97] %between% c(1,4),na.rm=T)
data_frame%>%select(90:101)
ntrci ntrcm ntoog ntoop ntoof ntooa ntoow ntoov ntgsp update_stamp counts
1 1 0 0 0 0 0 0 0 a a 10
2 NA NA NA NA NA NA NA NA <NA> <NA> 0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。