Apply函数出错:"参数意味着行数不同:1,0和#34;

时间:2016-08-05 19:33:24

标签: r dataframe apply

我有一个数据框。我需要搜索列" 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

是否在数据框中添加了另一个维度?

2 个答案:

答案 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)))