让我们说我有一个df包含ID,性别和几个数值变量,以及MAX1,MAX2和MAX3,其中
MAX1 = x1,x2,x3,x4,x5
的第一个最大值的变量名MAX2 =第二个最大值x1,x2,x3,x4,x5的变量名
MAX3 =第三个最大值x1,x2,x3,x4,x5的变量名
### Generate data
set.seed(123)
ID <- c(1,2,3,4,5,6,7,8,9,10)
gender <- c("m", "m", "m", "f", "f", "m", "m", "f", "f", "m")
x1 <- rnorm(10, 0, 1)
x2 <- rnorm(10, 0, 1)
x3 <- rnorm(10, 0, 1)
x4 <- rnorm(10, 0, 1)
x5 <- rnorm(10, 0, 1)
df <- data.frame(ID, gender, x1, x2, x3, x4, x5)
maxes <- t(sapply(1:nrow(df), function(i) {
names(sort(df[i,3:7], decreasing=T)[1:3])
}))
colnames(maxes) <- c("MAX1","MAX2", "MAX3")
df <- cbind(df, maxes)
现在我需要创建一个新的列(调用ir m_sum),其总和值为MAX1和MAX2。
例如,对于ID = 1,MAX1 = x2且MAX2 = x4,则m_sum的shold等于1.2240818 + 0.42646422 = 1.650546。
答案 0 :(得分:3)
如何使用apply
在一次通话中完成所有操作?
df$m_sum <- apply(df, 1, function(x) as.double(x[x[ "MAX1" ]]) + as.double(x[x[ "MAX2" ]]))
#[1] 1.65054602 0.15189652 2.45383397 3.04708946 2.02954308 3.50197809 1.39170465 0.09146139 1.48132102
#[10] 1.17044583
答案 1 :(得分:0)
console.log
等因使用因素
但是一个像
这样的简单循环df$MAX1
似乎产生了
sumMAX1MAX2 <- numeric()
for (r in 1:nrow(df)){
sumMAX1MAX2[r] <- df[r, as.character(df$MAX1)[r]] +
df[r, as.character(df$MAX2)[r]]
}
另一种方法是执行与> sumMAX1MAX2
[1] 1.65054602 0.15189655 2.45383398 3.04708945 2.02954308 3.50197812
[7] 1.39170470 0.09146141 1.48132102 1.17044585
类似的操作,例如
maxes