如何根据R中数据帧的两列组合创建新矩阵

如何根据R中数据帧的两列组合创建新矩阵,r,R,我试图找出一种方法,在两列组合的基础上创建一个新的矩阵 df <- data.frame(a=100:120, b=90:110, c=95:115, d=letters[1:21]) df试试这个代码。我的理解是,您希望进行(k-1)组合,其中k是数据框中每列与最后一个元素的列数,针对特定组合的列运行上面定义的函数,并将结果存储在列中。结果应为n乘以(k-1): df您期望的三列是什么?该函数将只返回20个y值(如果可行的话)。我希望20行3列的值为0.003、0.005或1,这取决

我试图找出一种方法,在两列组合的基础上创建一个新的矩阵

df <- data.frame(a=100:120, b=90:110, c=95:115, d=letters[1:21]) 

df试试这个代码。我的理解是,您希望进行(k-1)组合,其中k是数据框中每列与最后一个元素的列数,针对特定组合的列运行上面定义的函数,并将结果存储在列中。结果应为n乘以(k-1):


df您期望的三列是什么?该函数将只返回20个y值(如果可行的话)。我希望20行3列的值为0.003、0.005或1,这取决于它们是否满足if-else条件。这是可行的。谢谢。有没有一种没有循环的方法来实现它?你能和我分享一下你的设计目标吗?为什么没有循环?
func <- function(a, d){
    if(a >= 110 & d %in% c("a","b","c","d")
    {
        y <- 0.003
    }
  else if(a >= 110 & d %in% c("e","f")){
    y <- 0.005
  }
  else{
    y <- 1
  }
}

g <- mapply(func , df, df$d)
df <- data.frame(a=100:120, b=90:110, c=95:115, d=letters[1:21]) 

func <- function(a, d){
  if(a >= 110 & d %in% c("a","b","c","d"))
     {
       y <- 0.003
  }
  else if(a >= 110 & d %in% c("e","f")){
    y <- 0.005
  }
  else{
    y <- 1
  }
}

result.df = data.frame();
for(i in  1:(length(df) - 1)) { #assuming that d is the last element always
  g <- mapply(func , df[[i]], df[[length(df)]]);
  if(length(result.df) == 0) {
    result.df = as.data.frame(g)
  } else {
    result.df = cbind(result.df, as.data.frame(g))
  }
  colnames(result.df)[i] = i;
} 

result.matrix = as.matrix(result.df) #if you want the result as a matrix