我有一个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> =频率为零,那么我将在该Colum的最后一行之后打印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
}
答案 0 :(得分: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的有益评论!