我有两个数据帧。第一个是一组变量,其中最后一列是每一行中每个值的总和。第二个数据帧是一个索引,其中第一列是rowSum值可能属于的一组可能值。
我想要做的是将第一个数据帧中的rowSum值与第二个数据帧中与之最接近的值进行匹配,然后返回第二个数据帧中与该值一起出现的值,就像分配一个根据考试成绩的字母等级。
a <- c(1.2, 2.3, 3.4)
b <- c(2.3, 3.4, 4.5)
c <- c(3.4, 4.5, 5.6)
score <- c(6.9, 10.2, 13.5)
Scores <- data.frame(cbind(a,b,c,score))
score <- c(15, 14, 13
,12, 11, 10
,9, 8, 7
,6, 5, 4
,3, 2, 1)
grade <- c('A','A','A'
,'B','B','B'
,'C','C','C'
,'D','D','D'
,'F', 'F', 'F')
Grades <- data.frame(cbind(score,grade))
Scores$Grade <-
Grades$grade[match(Scores$score, Grades$score)]
预期:
a b c score Grade
1.2 2.3 3.4 6.9 C
2.3 3.4 4.5 10.2 B
3.4 4.5 5.6 13.5 A
实际:
a b c score Grade
1.2 2.3 3.4 6.9 NA
2.3 3.4 4.5 10.2 NA
3.4 4.5 5.6 13.5 NA
我认为这是因为match()不能舍入小数,因此不能与精确值匹配。是否有其他函数或方法可以将值匹配到最接近的匹配整数并返回相应的Grade? p>
答案 0 :(得分:0)
这可以通过struct Inner
{
char* OwO[12];
};
struct Middle
{
Inner iwi;
};
struct Outer
{
Middle uwu;
};
Outer owo;
int main() {
owo.uwu.iwi.OwO[0] = "What's this?";
printf("%s\n", owo.uwu.iwi.OwO[0]);
return 0;
}
完成,但是请确保正确创建了数据集,findInterval
返回cbind
,而matrix
只能有一个类。用matrix
包装会根据data.frame
(如果至少有一个factor
元素)将相同的类传播到character
或stringsAsFactors = TRUE/FALSE
。
通过“得分”列对“成绩”数据集进行排序,并应用character
以获取最接近匹配值的索引,并将其用于提取“成绩”
findInterval
或另一种选择是滚动联接
Scores <- data.frame(a,b,c,score)
Grades <- data.frame(score,grade)
Grades1 <- Grades[order(Grades$score),]
Scores$Grade <- Grades1$grade[findInterval(Scores$score, Grades1$score) +1]