R 在给定条件下对列进行变异
我是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列(&行) 我一直在想这样的事情
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:ColumncasesS11toS14
的长度必须为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