我的数据看起来像这样:
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)
这样做的最佳方式是什么?
谢谢!
答案 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))