2017-03-31 73 views
0

我有此数据帧提取物值(无因子)

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 

我的问题是我怎么能单独获取每个相对频率,比方说,把它变成一个新的变量。我发现这个

How to extract value from table function in R

但它并不在我的情况下工作,因为0和1 numericals。

table(df[which(df$V8==1),][2])/sum(as.numeric(df[which(df$V8==1),]$V8))["1"] 
+0

一种方法是存储表,然后提取:'temp < - table(df [which(...',然后'temp [“1”]')。另一个是将语句包装在'()'中,像这样(' 1)] $ V8)))[ “1”]'。 – lmo

+0

@Imo我试过了,它返回“整个”列,而不仅仅是0.1666667 –

+0

我认为你对输出有点困惑。 0和1实际上是元素的名称。如果你有临时对象,调用'names(temp)'。如果你愿意的话,你可以用'unname'去掉它们,但是这些名字不会进入任何计算。另一种看待这个问题的方法是尝试'temp [“1”] + 5'。 – lmo

回答

0

使用as.numeric,然后,在这之后,将其设定为比 0和1与 as.numeric(名称(表(数据))) 并且数字64和提取的数17与 数< -as.numeric(表(数据)) 然后 比< -COUNTS /总和(计数)

0

不能完全肯定你正在试图做什么,但提取...

sapply(subset(df, V8==1), function(x) sum(x==1)/length(x))