我一直在寻找这个问题的解决方案而没有太多运气。 我正在循环文件,以获得比例的列联表。例如:
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,]<-???
为我正在循环的其他文件添加其他行。
谢谢!
答案 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))
然后,您需要为每个文件循环。希望这能让你走上正轨。