r数据帧计算

时间:2017-11-24 22:25:34

标签: r dataframe

我创建了一个具有ifelse的简单函数,并希望使用多个dataframe列作为其输入。这就是我所做的。

year <- c(2016, 2016, 2017, 2017)
month <- c(11, 12, 1, 2)
df <- data.frame(year, month)

test_1 <- function(n, year_2016 = FALSE, year_2017 = FALSE){
  return (  ifelse( (year_2016 == FALSE && year_2017 == FALSE), ifelse(n==24, 'a', 'b'), ifelse(year_2016 == TRUE, ifelse(n==24, 'c', 'd'), ifelse(n==24, 'e', 'f'))))
}

test_2 <- function(n, year_2016 = FALSE){
  return (ifelse(year_2016 == FALSE, ifelse(n==12, 'g', 'h'), ifelse(n==12, 'i', 'j')))
}

test_1仅输出第一行中的单个值,而test_2输出向量。我认为两者都应该是载体。

如果有人能指导我为什么会这样,那就太好了。此外,如果有更好的方法进行此向量计算,请提供建议。

谢谢!

=====================================

编辑:

抱歉,我没有包含实际运行该功能的线路。我跑了两个跟随,我希望在两个中都能得到矢量。

test_1(df$month, df$year == 2016, df$year == 2017)
test_2(df$month, df$year == 2016)

但是,当我运行它时,我得到以下内容。

test_1(df$month, df$year == 2016, df$year == 2017)
[1] "d"

test_2(df$month, df$year == 2016)
[1] "j" "i" "h" "h"

1 个答案:

答案 0 :(得分:0)

我不得不在这里猜测一下,有很多方法可以改进这一点,但你可以用它来理解函数如何更好地工作以及如何将数据框用作函数中的输入。

year <- c(2016, 2016, 2017, 2017)
month <- c(11, 12, 1, 2)
df <- data.frame(year, month)

test_1 <- function(x){
  return (  ifelse( (x[1] != 2016 & x[1] != 2017), ifelse(x[2] == 12, 'a', 'b'), ifelse(x[1] == 2016, ifelse(x[2] == 24, 'c', 'd'), ifelse(x[2] == 24, 'e', 'f'))))
}

test_2 <- function(x){
  return (ifelse(x[1] != 2016, ifelse(x[2] == 12, 'g', 'h'), ifelse(x[2] == 12, 'i', 'j')))
}

##take each row of df and apply the functions
apply(df, 1, test_1)
[1] "d" "d" "f" "f"

apply(df, 1, test_2)
[1] "j" "i" "h" "h"

如果您有任何疑问,请告诉我

相关问题