我有这个数据框
d1 <- c(1, 0, 0, 1, 0, 0, 0, 1)
d2 <- c(0, 1, 0, 1, 1, 0, 0, 0)
d3 <- c(0, 0, 1, 0, 0, 0, 1, 0)
d4 <- c(0, 0, 0, 1, 0, 0, 0, 0)
d5 <- c(0, 0, 0, 0, 0, 0, 1, 0)
d6 <- c(0, 0, 0, 1, 0, 1, 0, 1)
d7 <- c(0, 0, 1, 0, 0, 1, 0, 1)
d8 <- c(1, 0, 0, 0, 0, 0, 0, 1)
d9 <- c(0, 0, 0, 0, 0, 1, 0, 1)
d10 <- c(1, 1, 0, 0, 0, 1, 0, 1)
df <- as.data.frame(rbind(d1,d2,d3,d4,d5,d6,d7,d8,d9,d10))
str(df)
我得到V8 == 1的所有行,并找到每列的相对频率(例如第2列,V2):
table(df[which(df$V8==1),][2])/sum(as.numeric(df[which(df$V8==1),]$V8))
0 1
0.8333333 0.1666667
我的问题是如何单独获得每个相对频率,让我们说它将它设置为一个新变量。我发现了这个
但它在我的情况下不起作用,因为0和1是数字。
table(df[which(df$V8==1),][2])/sum(as.numeric(df[which(df$V8==1),]$V8))["1"]
答案 0 :(得分:0)
使用as.numeric,然后,将它们更改为比率 数字0和1用提取 as.numeric(名称(表(数据))) 数字64和17用 计数&LT; -as.numeric(表(数据)) 然后 比率&LT; -COUNTS /总和(计数)
答案 1 :(得分:0)
不完全确定你要做什么,但......
sapply(subset(df, V8==1), function(x) sum(x==1)/length(x))