R 在给定条件下对列进行变异

R 在给定条件下对列进行变异,r,R,我是R的初学者,我被以下几点困住了 df <- tibble( id = c(01, 02), a = c(0.44, 0.42), b = c(1, 0.42), c = c(NaN, 0.71), d = c(0.75, 0), e = c(0.66, 0.75), f = c(0.5, 0.22), g = c(1, NaN), h = c(0.8, NaN) ) df 0-分别用于a:d列和e:h列(&行) 我一直在想这样的事情

我是R的初学者,我被以下几点困住了

df <- tibble(
  id = c(01, 02), 
  a = c(0.44, 0.42), 
  b = c(1, 0.42), 
  c = c(NaN, 0.71), 
  d = c(0.75, 0), 
  e = c(0.66, 0.75), 
  f = c(0.5, 0.22), 
  g = c(1, NaN), 
  h = c(0.8, NaN)
)
df 0-分别用于a:d列和e:h列(&行)

我一直在想这样的事情

df1 <- df %>% 
  rowwise() %>% 
  mutate(casesatod = length(which(., > 0), na.rm = TRUE),
         casesetoh = length(which(., > 0), na.rm = TRUE))
df1%
行()
变异(casesatod=length(其中(,,>0),na.rm=TRUE),
casesetoh=长度(其中(,>0),na.rm=真)
当然,这段代码并不完整,但可以让您了解我的想法

我真的很期待得到你的帮助


提前谢谢

从数据集中选择列子集后,选项将是
rowSums
。它将比按行
更有效,因为它是矢量化的

library(dplyr)
df %>% 
    mutate(casesatod = rowSums(.[2:5] > 0, na.rm = TRUE), 
           casesetoh = rowSums(.[6:9] > 0, na.rm = TRUE))

如果需要使用列名进行选择,请使用
select

df %>%
   mutate(casesatod = rowSums(select(., a:d) > 0, na.rm = TRUE),
          casesetoh = rowSums(select(., e:h)  > 0, na.rm = TRUE))
# A tibble: 2 x 11
#     id     a     b      c     d     e     f     g     h casesatod casesetoh
#  <dbl> <dbl> <dbl>  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>     <dbl>     <dbl>
#1     1  0.44  1    NaN     0.75  0.66  0.5      1   0.8         3         4
#2     2  0.42  0.42   0.71  0     0.75  0.22   NaN NaN           3         2
df%>%
变异(casesatod=rowSums(选择(,a:d)>0,na.rm=TRUE),
casesetoh=rowSums(选择(,e:h)>0,na.rm=TRUE))
#一个tibble:2x11
#id a b c d f g h casesatod CASETOH
#                     
#1 10.44 1 NaN 0.75 0.66 0.5 1 0.8 3 4
#2 0.42 0.42 0.71 0 0.75 0.22南南3 2

@JoB看起来像是按属性分组,请尝试
df%%>%ungroup%%>%
然后使用
mutate
和正确的索引进行大量修改!不幸的是,当我试图将您的代码应用于包含82行的原始数据集时,我反复收到一条错误消息。。“Fehler:Column
casesS11toS14
的长度必须为2(组大小)或1,而不是156”。你有什么解释吗?@JoB即使在
ungroup
之后也会出错吗so@JoB当我结束时,我可以在有
groupby
时重现错误,如果
ungroup
ed,它将消失
iris%%>%groupby(Species)%%>%变异(new=rowSums([1:3]>0))错误:列
new`的长度必须为50(组大小)或1,而不是150',且
ungroup
iris%>%groupby(Species)%%>%ungroup%>%mutate(新=行和([1:3]>0))#不稳定:150 x 6萼片。长萼片。宽瓣。长瓣。宽种新1 5.1 3.5 1.4 0.2刚毛3