计算以(R?中的相同字符串开头)变量的MAX。

时间:2014-02-22 12:30:41

标签: r

我的数据看起来像这样:

data = data.frame(Homework.1 = as.integer(c(10,6,8,NA,NA,NA)), 
                  Homework.1.German = as.integer(c(5,NA,NA,NA,8,NA)), 
                  Homework.1.spanish = as.integer(c(NA,NA,NA,NA,7,10)),
                  Homework.2 = as.integer(c(7,3,10,NA,NA,NA)), 
                  Homework.2.German = as.integer(c(NA,NA,NA,NA,9,NA)))

但是有更多的人,家庭作业和语言。

我想在数据框中创建一个新变量,它是所有作业中最大值的总和

这样的东西
data$max <- apply(data[grep("Homework.1", names(data))], 1, max, na.rm = TRUE) +
  apply(data[grep("Homework.2", names(data))], 1, max, na.rm = TRUE)  

这样做的最佳方式是什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

使用pmax

data$final <- with(data,
    pmax(Homework.1, Homework.1.German, Homework.1.Spanish, na.rm=TRUE) +
    pmax(Homework.2, Homework.2.German, Homework.2.Spanish, na.rm=TRUE))

或者,因为您对变量名称的结构有所了解:

q1 <- grep("\\.1", names(data))
q2 <- grep("\\.2", names(data))
data$final <- do.call(pmax, c(data[q1], na.rm=TRUE)) +
              do.call(pmax, c(data[q2], na.rm=TRUE))