来自 table() 的结果进入数据帧 R 的行

Results from table() into row of a dataframe R

我一直在寻找这个问题的解决方案,但运气不佳。 我正在遍历文件,以获得偶然性 tables 的比例。示例:

df<-data.frame("Ind"=c("A1","A2","A3","A4","A5"), "Highest"=c("W","W","BCW","BCW","W"))
tabledf<-table(df$Highest)/length(df$Highest) 

我想用上面 table 的结果填充一个 'empty' 数据框:

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

显然问号是我出错的地方。我编写了一个代码来遍历所有文件,为每个文件创建应急 tables,但我不确定如何告诉它用每个 table 填写结果 [i,] ,尤其是在上面的示例中,并非所有类别都出现在每个 table 中。我试过 match() 没有错误,但它只有 returns NAs。

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

>results

   F  W   F1  F2  BCF  BCW
1  0  0.6 0   0   0    0.4

我正在循环的其他文件有额外的行。

谢谢!

只需使用 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

你必须让你的向量成为 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 中的数据,您可以这样做:

result <-data.frame(t(as.vector(tabledf)))
colnames(result) <- names(tabledf)
result

  F   W F1 F2 BCF BCW
1 0 0.6  0  0   0 0.4

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

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

然后您需要为每个文件循环执行此操作。希望这能让你走上正轨。