我是R和数据分析的新手。我有一个与下面的数据库类似的数据库,只是大了很多,我试图找到一个通用的方法来计算每个国家有多少操作,有多少值为1,值为2的子问题,等等。对于每个动作都有多个问题,子问题和子问题,但我希望找到一种方法来计数
1:每个国家/地区有多少个操作,不包括子问题
2:一种找出每个国家、行动和问题有多少个值为1的子问题1或2的方法。
id country questionn subquestion value actionn
06 NIE 1 1 1 1
05 NIG 1 1 1 1
07 TAN 1 1 1 1
08 BEN 1 1 1 1
03 TOG 1 1 2 1
45 MOZ 1 1 2 1
40 ZIM 1 1 1 1
56 COD 1 1 1 1
87 BFA 1 1 1 1
09 IVC 1 1 2 1
08 SOA 1 1 2 1
02 MAL 1 1 2 1
78 MAI 1 1 2 1
35 GUB 1 1 2 1
87 RWA 1 1 2 1
41 ETH 1 1 1 1
06 NIE 1 2 2 1
05 NIG 1 2 1 1
87 BFA 1 2 1 2
我试图创建数据帧的子集,并一次一次计算每个国家的所有内容,但这将永远花费时间,我想知道是否有通用的方法来做到这一点。对于第一个问题,我已经这样做了
df1<-df %>% group_by (country) %>% summarise (countries=county)
unique(df1)
count(df1)
对于第二个问题,我想分别选择并计算具有quesionn=1、subquestion=1、value=1和actionn=1的每一行,然后使用qustionn=1、subquestionn=2、value=1、actionn=1等选择并计算每个国家有多少行。值是指问题的答案是1=yes还是2=no。
我将非常感谢您的帮助,非常感谢:)
发布于 2018-07-02 10:10:15
对于第一个问题,您可以尝试这样做:
df %>% filter(subquestion != 2) %>% group_by(country) %>% summarise(num_actions = n())
这将返回每个国家/地区的操作数量,删除在子问题列中没有2的行。请注意,summarize
函数中的n()
将对组(在本例中为国家/地区)中的观察值进行计数。
我不确定我是否完全理解第二个问题,但我的建议是为您想要知道的特定观察结果创建一个新标签(每个国家、操作和问题n有多少个值为1的子问题1或2):
df %>% mutate(country_question_code = paste(country, action, questionn, sep = "_")) %>% group_by(country_question_code) %>% summarize(num_subquestion = n())
发布于 2018-07-02 12:10:13
对于问题1,可能的解决方案(假设国家名称不是唯一的,并且actionn可以是0、1、2或更多)。仅用于总计数:
df%>%group_by(country)%>% summarise( "Count_actions" = sum(actionn) ) #ignores all other columns.
如果你想计算一个国家出现了多少次,用n()
代替sum(actionn, na.rm=TRUE)
.#,这可能不是你想要的,但有时简单的解决方案是最好的(只需计算国家的频率)
或者df%>%group_by(country, actionn)%>%summarise("count_actions"= n())
将给出每种类型的国家/地区计数(例如1,2或更多操作)。
数据表版本dt[, .(.N), by=.(country, actionn )]
对于问题2:在根据需要对数据进行过滤后,对"for each on your question“使用分组。在这里,为每个“国家/地区、问题和行动”筛选具有( and )值1的子问题1或2:
df%>%filter(subquestions <=2 & value==1)%>%group_by( country, question, actionn)%>%summarise("counts_desired"= n(), "sums_desired"= sum(actionn, na.rm=TRUE))
希望这能起作用。我也在学习并将其应用于类似的数据。没有对它进行测试,也没有对你的数据做出某些假设(数字的和干净的)。(旅行时也可以使用for.mobile!干杯!!)
https://stackoverflow.com/questions/51133060
复制相似问题