如何根据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