来自 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))
然后您需要为每个文件循环执行此操作。希望这能让你走上正轨。
我一直在寻找这个问题的解决方案,但运气不佳。 我正在遍历文件,以获得偶然性 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))
然后您需要为每个文件循环执行此操作。希望这能让你走上正轨。