我有关于某些属性的所有美国医院的数据。代表性样本可能如下所示:
Hospital.Name State HA HF PN Rank
1 HOSPITAL 1 NY 10.1 7.1 7.7 1
2 HOSPITAL 2 PA 10.4 11.2 11.6 2
3 HOSPITAL 3 SD 10.5 9.9 11.6 3
4 HOSPITAL 4 CA 10.5 8.4 9.7 4
5 HOSPITAL 5 CT 10.6 11.9 11.8 5
6 HOSPITAL 6 PA 10.7 8.3 10.9 6
上面显示的数据已经过部分处理 - 按属性排列和排名" HA"并添加了一列(" Rank")以反映这一点。
但是,这不是我需要的。我试图按状态分组这些属性的数据。
所以,最终输出有点像下面这样:
Hospital.Name State HA HF PN Rank
1 HOSPITAL 1 AK 12.1 7.1 7.7 1
2 HOSPITAL 2 AK 12.4 11.2 11.6 2
3 HOSPITAL 3 AK 14.5 9.9 11.6 3
4 HOSPITAL 4 AL 11.5 8.4 9.7 1
5 HOSPITAL 5 AL 15.6 11.9 11.8 2
6 HOSPITAL 6 AL 16.7 8.3 10.9 3
请注意属性值" HA"对于特定状态的等级1,可以高于或低于另一个状态的等级1的属性HA的值。基本上,状态中属性" HA"的等级是独立的。
所以,到目前为止,我已尝试在mutate函数中使用orderled和rank函数。但是,两者都会引发以下错误:
错误:大小不一致(%d),期望%d(组大小)或1
我如何实现我的需要?任何帮助/指导/建议都将受到高度赞赏。
**请注意,我有50个状态的数据,这些状态会运行到数千行,上面表1中显示的只是代表性数据。
另外,请注意上面表2中的数据是所需输出的样本,而不是整个输出。 **
答案 0 :(得分:2)
以下是使用dplyr
的另一种解决方案。您可以按州分组,然后进行排名:
dt <- data.table(Hospital.Name = "Hospital",
State = rep(c("AK", "AL"), each = 2),
HA = c(10,12,11,14))
dt %>%
group_by(State) %>%
mutate(Rank = rank(HA))
输出:
Hospital.Name State HA Rank
1 Hospital AK 10 1
2 Hospital AK 12 2
3 Hospital AL 11 1
4 Hospital AL 14 2
关于混乱的另一个词:
rank(dt$HA)
给出一个向量(此处大小为4),而rank(HA)
给出一个标量,表示列HA中当前行的当前排名(如果指定,也基于组)。
答案 1 :(得分:1)
这是使用std::find
的解决方案(注意:我将行顺序随机化以证明它不依赖于输入中的任何特定行顺序):
const char* end = buffer + chars_read;
const char* ptr = std::find(buffer, end, '\0');
if(ptr == end) {
// not found
}
else {
// ptr points to null character
}