1

我有一个 txt 文件(data5.txt):

1   0   1   0   0

1   1   1   0   0

0   0   1   0   0

1   1   1   0   1

0   0   0   0   1

0   0   1   1   1

1   0   0   0   0

1   1   1   1   1

0   1   0   0   1

1   1   0   0   0

我需要计算每列中 1 和 0 的频率

如果一个的频率 >= 零的频率,那么我将在该列的最后一行之后打印 1

我是 R 新手,但我试过了,但我得到了错误:

Error in if (z >= d) data[n, i] = 1 else data[n, i] = 0 : 

  missing value where TRUE/FALSE needed

我的代码:

data<-read.table("data5.txt", sep="")

m =length(data)

d=length(data[,1])/2

n=length(data[,1])+1

for(i in 1:m)
{

    z=sum(data[,i])

    if (z>=d) data[n,i]=1 else data[n,i]=0
}
4

1 回答 1

2

你可以试试这个:

rbind(df, ifelse(colSums(df == 1) >= colSums(df == 0), 1, NA))
#    V1 V2 V3 V4 V5
# 1   1  0  1  0  0
# 2   1  1  1  0  0
# 3   0  0  1  0  0
# 4   1  1  1  0  1
# 5   0  0  0  0  1
# 6   0  0  1  1  1
# 7   1  0  0  0  0
# 8   1  1  1  1  1
# 9   0  1  0  0  1
# 10  1  1  0  0  0
# 11  1  1  1 NA  1

更新,感谢@Arun 的好建议:

rbind(df, ifelse(colSums(df == 1) >= ceiling(nrow(df)/2), 1, NA)

甚至:

rbind(df, ifelse(colSums(df == 1) >= nrow(df)/2, 1, NA)

感谢@SvenHohenstein。

可能我误解了你的预期结果。如果在频率等于或大于零频率时想要 0,那么这就足够了:

rbind(df, colSums(df) >= nrow(df) / 2)

再次感谢@SvenHohenstein 的有用评论!

于 2013-11-10T10:39:28.827 回答