考虑以下数据框:
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)
Run Code Online (Sandbox Code Playgroud)
我想创建 B 列,其中 A 列中至少出现一个“是”会导致 B 列中每个单独的 ID 仅有“是”值。我尝试了以下两种方法(我觉得我已经差不多了):
library(dplyr)
df <- df %>%
group_by(ID) %>%
mutate(B1=ifelse(A == "Yes", "Yes", "No")) # B1 is the new column for comparison
Run Code Online (Sandbox Code Playgroud)
不幸的是,这给出了与 A 相同的列
和
df2 <- transform(df, B1= ave(A, ID, FUN=function(x) x[A == "Yes"]))
Run Code Online (Sandbox Code Playgroud)
产生错误消息:
1:在 x[...] <- m 中:要替换的项目数不是替换长度的倍数
非常感谢您的帮助。
你几乎已经拥有了。这是对您的管道的一个小修改。这就是你所追求的吗?
df <- df %>%
group_by(ID) %>%
mutate(B1=ifelse("Yes" %in% A, "Yes", "No"))
df
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
835 次 |
| 最近记录: |