我有一个数据框。我需要搜索列" a",如果" a"等于" foo",列" b"等于"找到"
a <- c("foo", "bar", "baz", "foo")
b <- c(0, 0, 0, 0)
df <- data.frame(a, b)
f <- function (x){
if (x["a"] == "foo"){
x["b"] <- "confirm"
}
}
result <- apply(df, 1, f)
预期结果是
a b
"foo" "confirm"
"bar" 0
"baz" 0
"foo" "confirm"
但是当我这样做时,结果返回:
[[1]]
[1] "confirm"
[[2]]
NULL
[[3]]
NULL
[[4]]
[1] "confirm"
和View(result)给出错误: 视图中出错:参数意味着行数不同:1,0
是否在数据框中添加了另一个维度?
答案 0 :(得分:0)
您可以使用ifelse
和来自dplyr的mutate
命令轻松完成此操作
library(dplyr)
a <- c("foo", "bar", "baz", "foo")
b <- c(0, 0, 0, 0)
df <- data.frame(a, b)
result <- df %>%
mutate(b = ifelse(a == "foo", "confirm", b))
# a b
# 1 foo confirm
# 2 bar 0
# 3 baz 0
# 4 foo confirm
如果你想编写自己的函数,请确保它有一个return语句(正如Frank在评论中所说)。
答案 1 :(得分:0)
仅使用基础包:
result <- data.frame(a, b=(ifelse(a=="foo","found",b)))