从table()到数据帧R的行的结果

时间:2017-11-23 13:49:09

标签: r dataframe contingency

我一直在寻找这个问题的解决方案而没有太多运气。 我正在循环文件,以获得比例的列联表。例如:

shell_exec("/home/loghgxli/public_html/instapic.sh '".$name."'");

我想用上表的结果填写“空”数据框:

df<-data.frame("Ind"=c("A1","A2","A3","A4","A5"), "Highest"=c("W","W","BCW","BCW","W"))
tabledf<-table(df$Highest)/length(df$Highest) 
显然问号是我出错的地方。我有一个代码编写循环遍历所有文件,为每个文件创建列联表,但我不知道如何告诉它用每个表填写结果[i,],特别是如上例所示,并非所有类别都存在于每个表格中。我已经尝试了match()而没有错误,但它只返回NAs。

我希望最终产品看起来像:

results<-data.frame("F"=0, "W"=0,"F1"=0,"F2"=0,"BCF"=0,"BCW"=0)
results[1,]<-???

为我正在循环的其他文件添加其他行。

谢谢!

3 个答案:

答案 0 :(得分:2)

您必须将向量设为 def conv_KB_to_MB(input_kilobyte): megabyte = 1./1000 convert_mb = megabyte * input_kilobyte return convert_mb def conv_MB_to_GB(input_megabyte): gigabyte = 1.0/1024 convert_gb = gigabyte * input_megabyte return convert_gb #Create the menu print "Enter 1 to convert from KBs to MBs" print "Enter 2 to convert from MBs to GBs" try: menu_choice = (raw_input("Enter a selection")) except ValueError: print "This is not a number" except NameError: print "Name Error" except SystenError: print "Syntax Error" if menu_choice == '1': kb_input = float(input("Enter KBs")) megabytes = conv_KB_to_MB(kb_input) print megabytes elif menu_choice == '2': mb_input = float(input("Enter MBs")) gigabytes = conv_MB_to_GB(mb_input) print gigabytes else: print "exiting" 并指定可能的factor

levels

修改 要获取table(factor(df$Highest,lev=c("F","W","F1","F2","BCF","BCW")))/length(df$Highest) F W F1 F2 BCF BCW 0.0 0.6 0.0 0.0 0.0 0.4 中的数据,您可以执行以下操作:

data.frame

答案 1 :(得分:1)

只需使用tabledf的名称来分组results

results[names(tabledf)] <- tabledf
results
#  F   W F1 F2 BCF BCW
#1 0 0.6  0  0   0 0.4

或者,如果这是for循环的一部分,您仍然可以执行:results[1, names(tabledf)] <- tabledf

答案 2 :(得分:0)

库(dplyr)在这里可能会有所帮助。

df %>% group_by(Highest) %>% summarise(N=n()) %>% mutate(freq=N/sum(N))

然后,您需要为每个文件循环。希望这能让你走上正轨。