r - 数据帧中逻辑值的逐行总和
问题描述
我有一个这样的数据框(有更多变量)
tb = data.frame(ID=c("a","b","c"),V1=c(TRUE,FALSE,TRUE),
V2=c(FALSE,FALSE,TRUE),V3=c(TRUE,TRUE,FALSE) )
tb
ID V1 V2 V3
1 a TRUE FALSE TRUE
2 b FALSE FALSE TRUE
3 c TRUE TRUE FALSE
我需要像这样按行添加第四个变量和真实值的总和,但保留所有其他变量
tb %>%
select(V1:V3) %>%
mutate(out = rowSums(.))
V1 V2 V3 out
1 TRUE FALSE TRUE 2
2 FALSE FALSE TRUE 1
3 TRUE TRUE FALSE 2
解决方案
dplyr 解决方案
在单个调用中,您可以使用where
内部的选择助手across
仅将满足条件 ( is.logical
) 的列提供给rowSums
.
tb %>% mutate(sum = rowSums(across(where(is.logical))))
ID V1 V2 V3 sum
1 a TRUE FALSE TRUE 2
2 b FALSE FALSE TRUE 1
3 c TRUE TRUE FALSE 2
您还可以在内部按名称选择列,或者使用带有starts_with
或的名称模式选择列matches
:
tb %>% mutate(sum = rowSums(across(V1:V3)))
#OR
tb %>% mutate(sum = rowSums(across(starts_with("V"))))
#OR
tb %>% mutate(sum = rowSums(across(matches("V\\d"))))
推荐阅读
- javascript - 在 nodejs 中执行以下操作的更好方法:比较导入的 csv 行或对象数组中是否存在特定键值对
- python - 在 A 列中搜索 dict 键的文本,如果找到,则将 B 列设置为 Pandas 数据框中的 dict 值
- java - java.awt.Window.dispose() 在 Mac OSX 上的 Eclipse RCP 项目中永远挂起
- haskell - Haskell GHCI 重新加载然后评估最后一个表达式
- java - 无法使用 restclienttest 模拟 resttemplate 调用
- spring - Spring RestTemplate,如何处理卡盘传输编码
- java - Tomcat 服务器返回错误 404 ...不,我不使用 web.xml、.jsp 或 .html 文件
- firebase - Flutter Web Google SignIn firebase API 失败,clientid 未列入白名单
- javascript - 在 D3 中对具有相同颜色的图边进行分组/聚类
- ruby-on-rails - Rails + simple_form 嵌套对象与茧。如何对有错误的对象进行排序并首先显示