r - 如何使用 if 条件检查多个值
问题描述
我喜欢下面提到的数据框:
记录:
ID Remarks Value
1 ABC 10
1 AAB 12
1 ZZX 15
2 XYZ 12
2 ABB 14
通过利用上述数据框,我想Status
在现有数据框中添加新列。
如果Remarks
是 ABC、AAB 或 ABB,则状态将是TRUE
,对于 XYZ 和 ZZX,它应该是FALSE
。
我正在使用下面提到的方法,但它没有用。
Records$Status<-ifelse(Records$Remarks %in% ("ABC","AAB","ABB"),"TRUE",
ifelse(Records$Remarks %in%
("XYZ","ZZX"),"FALSE"))
并且,基于Status
我想得出以下输出:
ID TRUE FALSE Sum
1 2 1 37
2 1 1 26
解决方案
Records$Status<-ifelse(Records$Remarks %in% c("ABC","AAB","ABB"),TRUE,
ifelse(Records$Remarks %in%
c("XYZ","ZZX"),FALSE, NA))
您需要用 括住您的字符串列表c()
,并为第二个 ifelse 添加一个“else”条件(但请参阅下面的 Roman 的回答以了解使用 执行此操作的更好方法case_when
)。(另请注意,这里我将"TRUE"
and "FALSE"
(作为字符类)更改为TRUE
and FALSE
(逻辑类)。
对于摘要(使用dplyr
):
Records %>% group_by(ID) %>%
dplyr::summarise(trues=sum(Status), falses=sum(!Status), sum=sum(Value))
# A tibble: 2 x 4
ID trues falses sum
<int> <int> <int> <int>
1 1 2 1 37
2 2 1 1 26
当然,如果你不是真的需要中间状态列而只需要汇总表,你可以完全跳过第一步:
Records %>% group_by(ID) %>%
dplyr::summarise(trues=sum(Remarks %in% c("ABC","AAB","ABB")),
falses=sum(Remarks %in% c("XYZ","ZZX")),
sum=sum(Value))
推荐阅读
- jquery - 在没有输入元素的情况下无法初始化 DateTimePicker
- java - 如何使用 java 语句从字符串数组的字符串数组中获取索引以打印语句?
- r - 如何有效地将许多数据框列重命名为 R 中的特定格式
- mysql - 对 mySQL 中的数据使用 str_to_date 和 INSERT-SELECT
- file - Apache骆驼的排序问题
- java - Java Maps/Data Structures - 如何让一个值查看以前的键值并下拉任何没有改变的东西?
- php - 如何找到多维关联数组的总和?
- python - 无需每次身份验证即可使用 Google Api 的任何方式?
- java - 单向与双向
- timer - VB6轮询与定时器事件