r - 根据其他列中至少一个变量的出现按组创建新列

标签 r dplyr

考虑以下数据框:

ID <- c(1,1,1,2,2,3,3,3,3)
A <- c("No","No","Yes","Yes","Yes","No","No","No","No")
B <- c("Yes","Yes","Yes","Yes","Yes","No","No","No","No")
df <- data.frame(ID,A,B)

我想创建 B 列,其中 A 列中出现至少一个"is"会导致 B 列中每个单独 ID 的值仅为"is"。我尝试了以下两种方法(我觉得我差不多了):

library(dplyr)
df <- df %>% 
  group_by(ID) %>% 
  mutate(B1=ifelse(A == "Yes", "Yes", "No")) # B1 is the new column for comparison

不幸的是,这给出了与 A 相同的列

df2 <- transform(df, B1= ave(A, ID, FUN=function(x) x[A == "Yes"]))

产生错误信息:

1:在 x[...] <- m 中: 要替换的项目数不是替换长度的倍数

非常感谢您的帮助。

最佳答案

你几乎成功了。这是对您的管道的一个小修改。这就是你想要的吗?

df <- df %>% 
 group_by(ID) %>% 
 mutate(B1=ifelse("Yes" %in% A, "Yes", "No"))
df

关于r - 根据其他列中至少一个变量的出现按组创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47514803/

相关文章:

r - 按年份生成固定长度的随机id作为字符

r - 将单独的月份和年份列合并到 ggplot2 中的图表

sql - 如何将 SQL 导入 R 的 dplyr?

r - 如何应用 `mutate_at` 内的函数,该函数按行条件影响其他列中的值?

r - 获取第一个非 0 值或最后一个 0 值(如果仅此而已)

r - 如何告诉 RStudio 使用 Anaconda 的 R 版本

r - 将具有两个参数的函数应用于 n × 2 矩阵

在矩阵的一行中重新排列字符向量

r - 一次合并多个列

r - 从重叠日期计算活跃天/月