我试图比较一列的内容与另一列的内容是否相等或不同。
Response <- c("Old", "New", "Old", "New")
Correct_answer <- c("New", "Old", "Old", "New")
comparison <- data.frame(Response, Correct_answer)
Run Code Online (Sandbox Code Playgroud)
我试过这个:
mutate(comparison, Resp_final = ifelse(grepl("Old", Response), "1",
ifelse(grepl("New", Response), "2", "")))
Run Code Online (Sandbox Code Playgroud)
但它只检查“响应”列。如何比较“Response”和“Correct_answer”列并使用 dplyr 在一列中获得结果?
谢谢!
yee*_*dle 11
如果您唯一关心的是平等,那么一个简单的方法if_else就可以做到:
comparison %>% mutate(Resp_final = if_else(Response == Correct_answer, 1, 0))
Run Code Online (Sandbox Code Playgroud)
但是,如果您不仅要比较它们是否相等,还要比较它们如何相等,您可以这样做case_when:
comparison %>%
mutate(Resp_final = case_when(
Response == Correct_answer & Response == "Old" ~ "1",
Response == Correct_answer & Response == "New" ~ "2",
TRUE ~ ""))
Run Code Online (Sandbox Code Playgroud)
输出:
## Response Correct_answer resp_final
## 1 Old New
## 2 New Old
## 3 Old Old 1
## 4 New New 2
Run Code Online (Sandbox Code Playgroud)
小智 2
如果要比较的列是具有不同级别数的因素,您可能需要先将它们转换为字符,否则会引发错误。
显示错误是如何发生的:
fruits1 <- as.factor(c("grape", "lemon", "watermelon",
"apple", "banana","avocado", "lemon","watermelon"))
fruits2 <- as.factor(c("lemon", "grape", "orange",
"apple", "grape","avocado","lemon","grape"))
df <- data.frame(fruits1, fruits2)
#Comparing:
df %>%
mutate(comparison = if_else(
fruits1 == fruits2, "equal", "different"))
#Throws an error
Run Code Online (Sandbox Code Playgroud)
将其固定在管道内:
df %>%
mutate(comparison = if_else(
as.character(fruits1) == as.character(fruits2), "equal", "different"))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7993 次 |
| 最近记录: |