我正在尝试制作类似于此的图表:
来自具有许多表的数据库(作为x轴)。
数据:
我在数据库中有几个表如下:BIN_NAME=example1 example2
$(BIN_NAME): %: $(ODIR)/%.o | $(BDIR)
recipe...
每个表有500多行和10+列(属性)
问题
其中一列包含该消息的条件(公平,良好,非常好等)。
在数据库中返回此查询的查询:
getActivity();
这将返回:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DbAdapter db = new DbAdapter(getActivity()); // Replace this with getActivity()
}
更新:总有4个条件具有一个空条件(对于没有条件的消息)。因此,如果我对所有表运行查询,我将获得与上面相同的表但具有不同的数字。
现在,我想将这些查询应用于数据库中的所有表,这样我就可以生成上面的图形(表格为x轴)。
我尝试使用这种方法:
Table1, Table2, Table3, etc
但是我收到了这个错误:
SELECT message_condition Condition,
COUNT(message_id) NumMessage
FROM `table1` GROUP message_condition
我认为我没有正确地执行此操作,是否知道如何通过R中的所有表运行该查询并生成该图?
答案 0 :(得分:3)
一些提示。
首先,您需要在数据框中包含表名,以便在绘图期间对其进行分组。最简单的方法是将它作为常量添加到查询中,使其变为类似
SELECT 'table1' TableName, etc etc
只需将paste
添加到您的函数中的现有查询中:
query <- paste0("SELECT '", table,"' TableName, COALESCE(NULLIF(message_condition, ''), 'default') message_condition, COUNT(message_id) NumMessage FROM '", table, "' GROUP BY message_condition", sep = '')
您还应该在条件为空时添加默认类别名称。您可以使用COALESCE
或ISNULL
执行此操作,如图所示。
修改强>
考虑到这一点,您只需要在{for循环中rbind
每个resutlset到整个数据帧的末尾。 R - Concatenate two dataframes?
(BTW,通常使用apply代替for循环)
像(未经测试的......):
df <- data.frame(TableName=character(), message_condition=character(), NumMessage=integer())
for (i in 1:length(lists)) {
rbind(df, doCountQuerys(con, lists[i]))
}
因此,您应该得到一个类似的数据框:
TableName, message_condition, NumMessage
table1, default, 30
table1, fair, 20
table1, good, 60
table1, ideal, 50
table2, default, 15
table2, fair, 10
table2, good, 30
table2, ideal, 60
table3, default, 10
table3, fair, 5
table3, good, 25
table3, ideal, 40
你可以简单地绘制这个:
ggplot(df, aes(x=TableName, y=NumMessage, fill=message_condition)) + geom_bar(stat="identity")
希望这会有所帮助,就是你所追求的