我正在编写一个代码,如果存在另一列(c1)中的值,则对某列(c2,c3,c4,...)中值的出现次数进行计数,然后除以c1中的总出现次数即可得出两者同时发生的百分比。也就是说,如果任何一个单元格都具有NA值,则不计算在内。
到目前为止,我已经编写了如下代码:
df <- data.frame(table)
for (col in 1:ncol(df)){
x = 0
for(row in 1:nrow(df)){
if ((is.na(df[row,1])==F) & (is.na(df[row,col])==F)){
x = x + 1
}
p <- x / colSums(!is.na(df))[1]
}
print(p)
}
它给了我正确的结果,但是全部都参考了c1列,如下所示:
C1
1
C1
0.8666667
C1
0.5333333
C1
0.5333333
C1
0.8
如何获取每个列的名称而不是对所有值都引用C1?以及如何获取p进行排序?
谢谢
答案 0 :(得分:0)
您可以尝试以下
library(tidyverse)
df2 <- tibble(
var_name = names(df),
prop = p
) %>%
arrange(p)
这应该为您提供一个新的小标题(数据框),其中有一列来自原始数据框的名称和一列包含您要计算的值的数据。